Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Append_Declare - Fatal编程技术网

Arrays Bash数组声明和附加

Arrays Bash数组声明和附加,arrays,bash,append,declare,Arrays,Bash,Append,Declare,我试图在bash脚本中声明并附加到一个数组,在搜索之后,我得到了这段代码 list=() list+="string" 但当我重复这一点时,结果什么也没有。 我也尝试过像这样附加到数组中 list[$[${#list[@]}+1]]="string" 我不明白为什么这样不行,有人有什么建议吗 编辑: 问题是列表被附加到while循环中 list=() git ls-remote origin 'refs/heads/*' | while read sha ref; do list

我试图在bash脚本中声明并附加到一个数组,在搜索之后,我得到了这段代码

list=()
list+="string"
但当我重复这一点时,结果什么也没有。 我也尝试过像这样附加到数组中

list[$[${#list[@]}+1]]="string"
我不明白为什么这样不行,有人有什么建议吗


编辑: 问题是列表被附加到while循环中

list=()

git ls-remote origin 'refs/heads/*' | while read sha ref; do
    list[${#list[@]}+1]="$ref"
done

declare -p list

请参见stackoverflow.com/q/16854280/1126841

您可以像这样将新字符串附加到数组中:

#!/bin/bash

mylist=("number one")

#append "number two" to array    
mylist=("${mylist[@]}" "number two")

# print each string in a loop
for mystr in "${mylist[@]}"; do echo "$mystr"; done

有关更多信息,请查看Ali Okan Yüksel已为您提到的第一种在数组中添加项的方法写下了答案

list+=( newitem  another_new_item ··· )
您提到的第二种方法的正确方法是:

list[${#list[@]}]="string"
假设非稀疏数组具有
N个
项,并且由于bash数组索引从
0
开始,因此数组中的最后一项是
N-1
th。因此,必须将下一项添加到
N
位置(
${#list[@]}
);不一定像你写的那样在
N+1

相反,如果使用稀疏数组,则提供数组索引的非常有用:

${!list[@]}
比如说,

$ list[0]=3
$ list[12]=32
$ echo ${#list[@]}
2
$ echo ${!list[@]}
0 12

你是怎么回显出来的?我已经试过“回显”${list}“,“回显”$list”和“回显$list”试过list+=('foo')
$[…]
已经过时了(改用
$(…)
是不必要的);正则数组的索引是在算术上下文中自动计算的,因此
list[${#list[@]}+1]=“string”
就足够了。请参阅。OP已使用正确的运算符附加到数组中;这不会有什么不同。