Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays bash数组语法和循环,请解释_Arrays_Bash_Quotes - Fatal编程技术网

Arrays bash数组语法和循环,请解释

Arrays bash数组语法和循环,请解释,arrays,bash,quotes,Arrays,Bash,Quotes,我对bash中的数组语法感到困惑。我通常使用引号括住要循环的字符串,但教程通常使用括号。对于踢腿,我做了4个简单的循环。前两个通过回显数组中的每个项而工作,正如我所期望的,后两个给出了意外的输出 为什么会发生这种情况 回路#1 环路#2 环路#3 环路#4 前3个代码段应该可以工作,但第3个代码段的问题是List=“item1 item2 item3”将item1替换为“item1 item2 item3”,这就是您获得输出的原因 item1 item2 item3 item2 item3

我对bash中的数组语法感到困惑。我通常使用引号括住要循环的字符串,但教程通常使用括号。对于踢腿,我做了4个简单的循环。前两个通过回显数组中的每个项而工作,正如我所期望的,后两个给出了意外的输出

为什么会发生这种情况

回路#1

环路#2

环路#3

环路#4


前3个代码段应该可以工作,但第3个代码段的问题是
List=“item1 item2 item3”
item1
替换为
“item1 item2 item3”
,这就是您获得输出的原因

item1
item2
item3
item2
item3 
更改变量的名称,它就会工作

List2="item1 item2 item3"   
在最后一个代码片段中,
$List
不带索引使用,这与引用数组
List
的第一个元素的内容相同

前两个通过回显数组中的每个项而工作,正如我所期望的,后两个给出了意外的输出

第四个循环相当于${List[0]}中f的
;do echo${f};完成
。这在
manbash
中有记录:

引用不带下标的数组变量等同于引用下标为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

始终引用
${List[@]}
,否则就没有理由使用
@
而不是
*
。第一个和第三个数组根本不涉及任何数组。无引号字符串扩展!=数组…还有,这里有很多引用问题;将自动捕获它们,并提供带有解释的wiki链接。@Charles。我想你的评论正是我不理解的关键所在。如果你能给我指出一些资源,解释你所说的“无引号的字符串扩展!=array”和“一堆引用问题”,我将不胜感激。我只是不明白原因。(编辑:抱歉,我不知道如何使用格式)$LISTA=“item1 item2 item3”$printf'%s\n'${LIST6[2]}$LISTB=(item1 item2 item3)$printf'%s\n'${LIST7[2]}item3感谢您的输入。我已经用
printf
替换了
echo
,并引用了变量。是的,我的意思是
List=“item1 item2 item3”
,我已经更新了答案。(竖起大拇指)re:answer-as-edited.Ah。我没意识到这是真的。如果我先跑#3,我就不会看到它,也不会知道它是这样工作的。谢谢
$ List=(item1 item2 item3)
$ for f in $List; do echo ${f}; done
item1
item1
item2
item3
item2
item3 
List2="item1 item2 item3"   
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