Adicionar um novo elemento a um array sem especificar o índice em Bash

Existe uma maneira de fazer algo como PHPs $array[] = 'foo'; in bash vs doing:

array[0] = 'foo'
array[1] = 'bar'
Solução

Sim, há:

ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')

Manual de Referência de Bash:

No contexto onde uma instrução de atribuição está atribuindo um valor a uma variável shell ou índice de array (veja Arrays), o operador '+=' pode ser usado para anexar ou adicionar ao valor anterior da variável's.

Comentários (15)
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
Comentários (3)

Se o seu array é sempre sequencial e começa em 0, então você pode fazer isso:

array[${#array[@]}]='foo'

# gets the length of the array
${#array_name[@]}

Se você inadvertidamente usar espaços entre o sinal de igualdade:

array[${#array[@]}] = 'foo'

Então você receberá um erro semelhante a:

array_name[3]: command not found
Comentários (4)