迭代包含空格的元素的数组

时间:2013-08-19 13:07:08

标签: arrays bash

给定两个元素的数组,

array=("foo bar" baz)

使用带有“普通”语法的for..in循环会产生三次次迭代(扩展数组的元素)。

for element in ${array[@]}
do echo $element
done

输出:

foo
bar
baz

虽然带有“index”语法的for..in循环按预期工作(元素未展开)。

for i in ${!array[@]}
do echo ${array[i]}
done

输出:

foo bar
baz

有没有办法像我想要的那样使用第一个语法结构(即获得与使用第二个结构得到的结果相同的结果)?

GNU bash, version 4.1.2(1)-release

2 个答案:

答案 0 :(得分:4)

报价有所不同,因此您需要将代码更新为以下内容:

for element in "${array[@]}"
do
   echo $element
done

请注意

for element in "${array[@]}"
               ^           ^

而不是

for element in ${array[@]}

测试

$ array=("foo bar" baz)
$ for element in "${array[@]}"; do echo $element; done
foo bar
baz

答案 1 :(得分:2)

你有没有尝试过:

for element in "${array[@]}"; do 
  echo "${element}"
done

manual会告诉:

  

IFS是一个单独字段的字符列表; shell时使用   将词语拆分为扩展的一部分。

这样做的:

IFS=$''
for element in ${array[@]}; do 
  echo "${element}"
done

也会给出预期的结果。