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