【问题标题】:Why is the integer variable disappearing in this bash while loop?为什么整数变量在这个 bash while 循环中消失了?
【发布时间】:2014-10-11 09:02:41
【问题描述】:

我正在尝试在 bash 脚本中使用 while 循环列出目录名称数组。

循环代码如下(其中$len是$folderArray的长度):

i=0
while [ $i -lt $len ]; do
  echo "$i: ${folderArray[$i]}"
  let i++
done

但是,我的输出显示如下:

0: folder1
folder2
folder3
etc.

为什么文件夹2和文件夹3没有显示“1:”和“2:”?

我阅读了有关使用进程替换来解决此问题的信息,但我不确定这将对此有何帮助。

【问题讨论】:

    标签: bash loops while-loop integer


    【解决方案1】:

    这表明您将所有项目存储在数组的一个元素中:

    "${folderArray[0]}"
    

    如果您在此之前尝试进行一些分词,您可能根本无法拆分它们。考虑检查用于将行存储到folderArray 的代码。

    【讨论】:

    • 或者可能其他项目以\r开头,但您的解释更有可能。
    • 我设置为等于:ssh -l $remoteUser $remoteHost \"ls $remoteDir\"
    • 使用 findreadarray 代替:readarray -t folderArray < <(exec ssh -l "$remoteUser" "$remoteHost" "find \"$remoteDir\" -maxdepth 1 -mindepth 1 -printf '%f\n'")
    【解决方案2】:

    首先检查folderArray 数组的第一个元素中实际存储的内容。这很可能是在${folderArray[0]}

    folder1
    folder2
    folder3
    

    您的 while 循环在一次迭代中通过。

    只需说 echo "${folderArray[0]}" 即可进行测试

    换句话说:没有变量正在消失。您的循环只有一次迭代。


    编辑:根据您的评论,可能是这样的:

    folderArray=$(ssh ${remoteUser}@${remoteHost} "ls $remoteDir")
    count=0
    for f in $folderArray ; do
      echo "$count: $f"
      ((count++))
    done
    

    【讨论】:

    • 你是对的!我尝试使用以下代码将文件夹名称数组放入 folderArray:folderArray="ssh -l $remoteUser $remoteHost \"ls $remoteDir\""
    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多