Existem maneiras de fazer isso com eval
, mas elas são inseguras. Existem algumas maneiras de fazer isso no bash 2.05b +:
$ foo=(a b c)
$ name=foo
$ temp_indirect=${name}[@]
$ printf '<%s>\n' "${!temp_indirect}"
<a>
<b>
<c>
Isso é muito feio porque depende de detalhes de implementação (potencialmente não documentados?) do analisador bash, portanto, use-o por sua conta e risco.
Em geral, se você quiser estruturas de dados complexas, sugiro outro idioma. Em muitos casos, existem soluções alternativas para torná-las possíveis no bash, mas a sintaxe é obscura porque a linguagem não é otimizada para elas (é principalmente otimizada para IPC e manipulação de arquivos).