Vários problemas, em ordem lógica de correção:
- Estilo (pet peeve)
-
Com sua instrução
${...}
emupdate_array()
, a sintaxe${..}
para usar uma variável, não defini-la.Exemplo:
foo[0]=abc # assigns 'abc' to foo[0]
-
Trabalhando em torno de que o nome da matriz é armazenado em uma variável.
Não funciona:
[0]=abc
Trabalhando:
declare -g "[0]=abc" # -g arg is for a global variable
-
Passar um argumento para
update_array()
deve passar o nome da variável (foo
neste caso), não o conteúdo da matriz.foo[@]
não é nada especial, é uma string completamente normal (no Bash). -
A expansão de variável com
${foo[@]}
deve ter aspas duplas.
A versão de trabalho do código está abaixo:
update_array() {
declare -g "[0]=abc"
}
foo=(foo bar)
update_array foo
for i in "${foo[@]}"; do
echo "$i"
done
## Following line added by me for further clarification
declare -p foo
que imprime corretamente:
abc
bar
declare -a foo='([0]="abc" [1]="bar")'