给定两个元素的数组,
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
答案 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
也会给出预期的结果。