为什么整个变量在循环中的bash中消失了?

时间:2014-08-18 12:36:29

标签: bash loops while-loop integer

我试图在bash脚本中使用while循环列出一个目录名数组。

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

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

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

0: folder1
folder2
folder3
etc.

为什么" 1:"和" 2:"没有显示folder2和folder3?

我读过有关使用流程替换来解决此问题的方法,但我不确定这会对此有何帮助。

2 个答案:

答案 0 :(得分:3)

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

"${folderArray[0]}"

如果你之前尝试过分词,你可能根本就无法拆分它们。请考虑检查用于将行存储到folderArray的代码。

答案 1 :(得分:1)

首先检查实际存储在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