我试图在 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
有关更多信息,您可以查看http://wiki.bash-hackers.org/syntax/arrays
Ali Okan Yüksel 写下了您提到的有关在数组中添加项目的第一种方法的答案。
list+=( newitem another_new_item ··· )
你提到的第二种方法的正确做法是:
list[${#list[@]}]="string"
假设非稀疏数组有
N
个项目,并且由于bash数组索引从0
开始,所以数组中的最后一个项目是第N-1
。因此下一项必须添加到N
位置(${#list[@]}
);不一定像你写的那样在 N+1
中。
相反,如果使用 sparse 数组,那么 bash 参数扩展 会非常有用,它提供了数组的索引:
${!list[@]}
例如,
$ list[0]=3
$ list[12]=32
$ echo ${#list[@]}
2
$ echo ${!list[@]}
0 12