copy array com nome da array dentro da string no bash

1

No script bash 4.3, tenho variáveis:

environment="local"
config_local=("a" "b" "b" "d")
copy_from="config_${environment}"

Eu quero copiar valores da matriz com o nome armazenado em copy_from para outra matriz chamada config .

Eu tentei isso e algumas variações:

config=${!copy_from}
echo "${config[@]}"
config=${!copy_from[@]}
echo "${config[@]}"
config=("${!copy_from}")
echo "${config[@]}"
config=("${!copy_from[@]}")
echo "${config[@]}"

mas não consigo copiar toda a matriz para config e obter apenas 0 ou o primeiro elemento apenas:

a
0
a
0

Como posso fazer isso no bash?

    
por piotrekkr 29.04.2016 / 15:14

1 resposta

3

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).

    
por 29.04.2016 / 15:25

Tags