As estruturas de dados que não sejam strings não podem ser realmente passadas entre as funções do shell. No entanto, você pode usar referências de nomes para passar nomes de matrizes associativas (ou de qualquer outra variável que você queira). Referências de nomes estão disponíveis em bash
desde a versão 4.3.
Exemplo:
foo () {
declare -n aarr="$1"
aarr["fookey"]=foovalue
}
declare -A myarray
myarray["mainkey"]=mainvalue
foo myarray
for key in "${!myarray[@]}"; do
printf '%s = %s\n' "$key" "${myarray[$key]}"
done
Observe que bash
requer que o nome da variável de referência de nome ( aarr
acima) não seja igual ao nome da variável referenciada ( myarray
acima).
Teste:
$ bash script.sh
fookey = foovalue
mainkey = mainvalue