2017-02-03 21 views
-1

我想声明并追加到bash脚本数组,搜索后,我产生了这个代码。猛砸数组声明和appendation

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

+0

你怎么回音它出来了吗? – Inian

+0

我曾尝试 '回声 “$ {list}里”', '回声 “$目录”' 和 '回声$列表' –

+0

你可以尝试'回声 “$ {列表[0]}”' – Inian

回答

3

您可以将新的字符串到你的数组是这样的:

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

+0

OP已经使用正确的操作符来追加到数组;这不会有所作为。 – chepner

0

Ali OkanYüksel已经写下了你提到的有关在数组中添加项目的第一种方法的答案。

list+=(newitem another_new_item ···) 

你提到的第二个方法,正确的做法是:

list[${#list[@]}]="string" 

假设一个非稀疏阵列具有N项目,因为bash的数组索引从0,在最后一个项目启动该阵列是N-1 th。因此,下一个项目必须在N位置(${#list[@]})被添加;不一定在你写的N+1

相反,如果使用稀疏阵列,它是提供了数组的索引bash parameter expansion非常有用:

${!list[@]} 

例如,

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