我对bash中的数组语法感到困惑。我通常使用引号将字符串括起来循环,但教程通常使用括号。对于踢,我做了4个简单的循环。前两个工作正如我预期的那样,通过回显数组中的每个项目,后两个产生了意想不到的输出。
为什么会这样?
LOOP#1
$ List="item1 item2 item3"
$ for f in $List; do echo ${f}; done
item1
item2
item3
LOOP#2
$ List=(item1 item2 item3)
$ for f in ${List[@]}; do echo ${f}; done
item1
item2
item3
LOOP#3
$ List="item1 item2 item3"
$ for f in ${List[@]}; do echo ${f}; done
item1
item2
item3
item2
item3
圈#4
$ List=(item1 item2 item3)
$ for f in $List; do echo ${f}; done
item1
答案 0 :(得分:1)
前两个按照我的预期通过回显数组中的每个项目,第二个给出了意想不到的输出。
你的第四个循环相当于for f in ${List[0]}; do echo ${f}; done
。这在man bash
:
引用不带下标的数组变量等效于引用下标为0的数组。
第三个循环有效但不打印原始数组。尝试:
List=(item1 item2 item3) # Declares array List
printf '%s\n' "${List[@]}"
item1
item2
item3
List="item1 item2 item3" # Overwrites first element of array...
# ... equivalent to List[0]="item1 item2 item3"
printf '%s\n' "${List[@]}"
item1 item2 item3
item2
item3
答案 1 :(得分:0)
前3个片段应该有效,但第3个问题是List="item1 item2 item3"
会将item1
替换为"item1 item2 item3"
,这就是你获得输出的原因
item1
item2
item3
item2
item3
更改变量的名称,它将起作用
List2="item1 item2 item3"
最后一个片段$List
在没有索引的情况下使用,这与引用数组List
的第一个元素的内容相同。