Bash 数组声明和附加数据

问题描述 投票:0回答:2

我试图在 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

arrays bash append declare
2个回答
13
投票

您可以将新字符串附加到数组中,如下所示:

#!/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


2
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.