Não é assim que você define matrizes em bash
.
a="foo bar"
define uma variável string / escalar. E usá-lo como $a
(sem aspas) executa o operador split + glob que só faz sentido para strings representando uma lista de padrões de arquivo separados por $IFS
.
Em bash
, as matrizes são definidas como:
a=(foo bar)
Então, aqui, você quer:
array1=(name1 name2)
name1=(one two)
name2=(red blue)
for name in "${array1[@]}"
do
typeset -n nameref="$name"
for value in "${nameref[@]}"
do
printf '%s\n' "$name - $value"
done
done
typeset -n
é uma adição relativamente recente a bash
e declara um nameref , que é uma variável que contém o nome de outra variável e quando expandida na verdade se refere à variável nomeada.