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]=abcTrabalhando:
declare -g "[0]=abc" # -g arg is for a global variable -
Passar um argumento para
update_array()deve passar o nome da variável (fooneste 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")'