bash array syntax and loops, please explain
本问题已经有最佳答案,请猛点这里访问。
我对bash中的数组语法感到困惑。我通常使用引号将字符串括起来进行循环,但教程通常使用括号。为了踢我做了4个简单的环。前两个通过回显数组中的每个项,如我所预期的那样工作,第二个提供了意外的输出。
为什么会这样?
回路1
1 2 3 4 5 | $ List="item1 item2 item3" $ for f in $List; do echo ${f}; done item1 item2 item3 |
回路2
1 2 3 4 5 | $ List=(item1 item2 item3) $ for f in ${List[@]}; do echo ${f}; done item1 item2 item3 |
号
回路3
1 2 3 4 5 6 7 | $ List="item1 item2 item3" $ for f in ${List[@]}; do echo ${f}; done item1 item2 item3 item2 item3 |
回路4
1 2 3 | $ List=(item1 item2 item3) $ for f in $List; do echo ${f}; done item1 |
。
The first two work as I expected by echoing each item in the array, the second two gave unexpected output.
号
第四个循环相当于
Referencing an array variable without a subscript is equivalent to referencing the array with a subscript of 0.
号
第三个循环工作,但不打印原始数组。尝试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | List=(item1 item2 item3) # Declares array List printf '%s '"${List[@]}" item1 item2 item3 List="item1 item2 item3" # Overwrites first element of array... # ... equivalent to List[0]="item1 item2 item3" printf '%s '"${List[@]}" item1 item2 item3 item2 item3 |
前3个片段应该可以工作,但第3个片段的问题是,
1 2 3 4 5 | item1 item2 item3 item2 item3 |
更改变量的名称,它将起作用
1 | List2="item1 item2 item3" |
号
在最后一个代码段中,使用