24

在 perl 中,只需执行以下操作来存储和迭代名称列表

my @fruit = (apple, orange, kiwi);
foreach (@fruit) {
        print $_;
}

bash 中的等价物是什么?

4

4 回答 4

45

bash(与 POSIX sh 不同)支持数组:

fruits=(apple orange kiwi "dried mango")
for fruit in "${fruits[@]}"; do
  echo "${fruit}"
done

这样做的好处是数组元素可能包含空格或 $IFS 的其他成员;只要它们作为单独的元素正确插入,它们就会以相同的方式被读出。

于 2008-09-17T00:21:22.567 回答
11

像这样:

FRUITS="apple orange kiwi"
for FRUIT in $FRUITS; do
  echo $FRUIT
done

请注意,如果水果名称中有空格,这将不起作用。在这种情况下,请参阅这个答案,它的便携性稍差,但更健壮。

于 2008-09-17T00:16:42.127 回答
6

既然我喜欢的答案已被接受为正确答案,我现在将进入另一个话题:如何IFS为个人谋取利益。:-P

fruits="apple,orange,kiwifruit,dried mango"
(IFS=,
 for fruit in $fruits; do
     echo "$fruit"
 done)

我将代码放在括号中,以便将IFS更改隔离到它自己的子流程中;因此,在括号部分的末尾,将IFS恢复为其旧值。:-)

于 2008-09-17T00:20:05.847 回答
4
为我在苹果橙猕猴桃
做
  回声 $i
完毕
于 2008-09-17T00:16:32.627 回答