0

给定一个包含两个元素的数组,

array=("foo bar" baz)

使用for..in“正常”语法的循环会产生三个迭代(数组的元素被扩展)。

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

输出:

foo
bar
baz

虽然for..in具有“索引”语法的循环按预期工作(元素未扩展)。

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

输出:

foo bar
baz

有什么方法可以按照我的意图使用第一个语法结构(即获得与使用第二个结构相同的结果)?

GNU bash, version 4.1.2(1)-release
4

2 回答 2

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
于 2013-08-19T13:12:49.757 回答
2

你试过了吗:

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

手册会告诉:

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

正在做:

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

也会给出预期的结果。

于 2013-08-19T13:13:18.650 回答