与bash中的Perl列表等效的是什么?

时间:2020-03-05 18:57:34  来源:igfitidea点击:

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

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

相当于什么呢?

解决方案

回答

for i in apple orange kiwi
do
  echo $i
done

回答

像这样:

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

请注意,如果水果名称中有空格,则此方法将无效。在这种情况下,请查看此答案,它的便携性稍差,但功能更强大。

回答

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

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

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

回答

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

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

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