Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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_Indexing_Parameter Passing_Whitespace - Fatal编程技术网

Arrays bash以增量方式添加到数组中

Arrays bash以增量方式添加到数组中,arrays,bash,indexing,parameter-passing,whitespace,Arrays,Bash,Indexing,Parameter Passing,Whitespace,考虑下面的代码 #! /bin/bash declare -a input # unnecessary declare -a bad declare -a good # unnecessary input=('alpha 23' 'bravo 79' 'charlie 12') echo "input is " ${#input[@]} "long" for x in "${input[@]}" do bad=$x good[ ${#good[@]} ]=$x ech

考虑下面的代码

#! /bin/bash

declare -a input # unnecessary
declare -a bad
declare -a good # unnecessary

input=('alpha 23' 'bravo 79' 'charlie 12')
echo "input is " ${#input[@]} "long"
for x in "${input[@]}"
do
    bad=$x
    good[ ${#good[@]} ]=$x
    echo 
    echo "added '$x', good is now " ${#good[@]} "long, bad is still " ${#bad[@]} "long"
done
输出是

input is  3 long

added 'alpha 23', good is now  1 long, bad is still  1 long

added 'bravo 79', good is now  2 long, bad is still  1 long

added 'charlie 12', good is now  3 long, bad is still  1 long
根据bash的手册页。。。分配给索引数组时,如果提供了可选的方括号和下标,则该索引被分配给;否则,分配的元素的索引是语句分配给的最后一个索引加上一个。。索引从零开始

我显然不理解粗体部分,因为我希望语句“bad=$x”在每次执行时自动递增索引。它没有,并且每次都分配给坏[0]


为什么它没有达到我预期的效果?有没有比我分配给good[…]的笨拙行更好的编写代码的方法

array=([0]=zero [1]=one [2]=two)
相当于

array=([0]=zero one two)
事实上,这与

array=(zero one two)
要添加到数组,请使用
+=

array+=(three)

您所引用的部分与转让有关,而不是与添加有关:

array=([0]=zero [1]=one [2]=two)
相当于

array=([0]=zero one two)
事实上,这与

array=(zero one two)
要添加到数组,请使用
+=

array+=(three)

choroba回答了我的问题,正确的代码是

#! /bin/bash

input=('alpha 23' 'bravo 79' 'charlie 12')
echo "input is " ${#input[@]} "long"
for x in "${input[@]}"
do
    output+=("$x")
done

echo "output = (" ${output[@]} ") and is " ${#output[@]} " long "

它对于扫描参数列表并将其处理为脚本非常有用,如果参数中有空格和其他不合适的字符

choroba回答了我的问题,正确的代码是

#! /bin/bash

input=('alpha 23' 'bravo 79' 'charlie 12')
echo "input is " ${#input[@]} "long"
for x in "${input[@]}"
do
    output+=("$x")
done

echo "output = (" ${output[@]} ") and is " ${#output[@]} " long "

如果参数中有空格和其他笨拙的字符,那么它有助于扫描参数列表并将其处理为脚本

请参见:请参见:这现在更有意义了,谢谢。如果我用bad+=(“$x”)替换上面代码中的bad=$x,那么我就得到了我想要的答案。这现在更有意义了,谢谢。如果我用bad+=(“$x”)替换上面代码中的bad=$x,那么我就得到了我想要的答案。