Arrays Bash数组声明和附加
我试图在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
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已使用正确的运算符附加到数组中;这不会有什么不同。