69

这个问题与 Shell 是否支持集合不同?

我知道很多脚本语言支持列表结构,比如python、python、ruby和javascript,那么linux shell呢?

shell 支持这样的语法吗?

for i in list:
do
     print i
done

我会首先初始化一个列表,例如:

ListName = [ item1, item2, ..., itemn ]

然后迭代它

在编写 shell 脚本时这可能吗?

4

2 回答 2

121

它支持列表,但不支持单独的数据结构(暂时忽略数组)。

for循环迭代一个由空格分隔的值组成的列表(一般意义上),无论该列表是如何创建的,无论是字面意思:

for i in 1 2 3; do
    echo "$i"
done

或通过参数扩展:

listVar="1 2 3"
for i in $listVar; do
    echo "$i"
done

或命令替换:

for i in $(echo 1; echo 2; echo 3); do
    echo "$i"
done

数组只是一个特殊参数,它可以包含更结构化的值列表,其中每个元素本身都可以包含空格。比较差异:

array=("item 1" "item 2" "item 3")
for i in "${array[@]}"; do   # The quotes are necessary here
    echo "$i"
done

list='"item 1" "item 2" "item 3"'
for i in $list; do
    echo $i
done
for i in "$list"; do
    echo $i
done
for i in ${array[@]}; do
    echo $i
done
于 2012-09-07T12:10:23.357 回答
16

要列出清单,只需这样做

colors=(red orange white "light gray")

从技术上讲是一个数组,但是 - 当然 - 它具有所有列表功能。
甚至python列表都是用数组实现的

于 2012-09-07T10:24:51.817 回答