linux shell支持列表数据结构吗?

hug*_*eow 49 linux bash shell ash

这个问题与shell支持集不一样吗?

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

shell支持这样的语法吗?

for i in list:
do
     print i
done
Run Code Online (Sandbox Code Playgroud)

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

ListName = [ item1, item2, ..., itemn ]
Run Code Online (Sandbox Code Playgroud)

然后迭代它

在编写shell脚本时可能吗?

che*_*ner 83

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

for白色空间在列表循环迭代(一般意义上的)分隔值,不管如何被创建的列表,无论是从字面上:

for i in 1 2 3; do
    echo "$i"
done
Run Code Online (Sandbox Code Playgroud)

或通过参数扩展:

listVar="1 2 3"
for i in $listVar; do
    echo "$i"
done
Run Code Online (Sandbox Code Playgroud)

或命令替换:

for i in $(echo 1; echo 2; echo 3); do
    echo "$i"
done
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • 它是一个特殊的索引,它使扩展生成数组的所有元素,而不仅仅是一个特定的元素. (3认同)

Don*_*sto 12

要列出清单,只需这样做

colors=(red orange white "light gray")
Run Code Online (Sandbox Code Playgroud)

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

  • @Neevek不会做你认为的事情; "浅灰色"将被视为"轻"和"灰"两个项目.你需要使用``$ {colors [@]}"`(`@`not`*`,并引用). (11认同)
  • 要迭代数组,请在$ {colors [*]}中使用`for item; 做echo $ item; done` (4认同)
  • 基本上这是一个历史缺陷,Bourne shell中的`$*`在所有情况下都无法正常工作,因此必须发明"$ @". (2认同)