Cópia de array usando variáveis ​​dinâmicas

Cópia de array usando variáveis ​​dinâmicas

Eu tenho uma matriz de 24 elementos armazenados na matrizmba_ext.

echo ${mba_ext[13]} gives me expected results.

Agora eu criei uma variáveltemp="mba_ext"

Agora estou tentando copiar o conteúdo do array para outro array usando a variável temporária. Escrevi o código conforme mostrado abaixo:

new_array=$(eval echo '$'{${temp}[@]})

Quando dou, echo$new_arrayestou recebendo todo o conteúdo do array sendo impresso sem nenhum índice.

Quando dou, echo ${new_array[4]}não estou obtendo resultados. Idealmente, este comando deve imprimir o conteúdo no local do índice 4.

Alguém pode ajudar?

Responder1

Baseado emesta resposta no superusuário.

Você pode usar indireção de variável com um array adequado [...]. O complicado é que você precisa incluir o elemento da matriz (ou [@]todos os elementos) na variável pela qual está indiretando.

Exemplo de código com os nomes que você usou:

mba_ext=('normal' 'with space' 'double"quote' "single'quote" $'new-\n-line' '\backslash')
temp="mba_ext"
temparray="${temp}[@]"   # This includes the array name AND "[@]"
new_array=("${!temparray}")
printf '<%s>\n' "${new_array[@]}"

informação relacionada