2017-02-03 9 views
-1

Я пытаюсь объявить и добавить к массиву в сценарии bash, после того, как я искал этот код.Объявление массива Bash и добавление

list=() 
list+="string" 

Но когда я повторяю это, это ничего не значит. я также пытался добавить его к массиву, как этот

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

Я не понимаю, почему это не работает, кто-то есть какие-то предложения?


EDIT: Проблема список добавляется к внутри цикла.

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

Я пробовал 'echo' $ {list} "',' echo" $ list "'и' echo $ list ' –

+0

Можете ли вы попробовать' echo' $ {list [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

Али Окан Юксель написал ответ на первый метод, который вы упомянули о добавлении элементов в массив.

list+=(newitem another_new_item ···) 

Правильный путь второго метода вы упомянули это:

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

Предполагая, что неразреженных массива имеет N элементов и потому Баш индексы массива начинаются с 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