Bash - Looping através de loop aninhado usando matrizes

0

Eu tenho 1 array e 2 array associativo. Eu quero fazer um loop através de array associativo usando uma lista de matriz de mestre porque eu quero que o código seja passível de manutenção. Mas eu não consigo acertar.

Quando eu tentei imprimir o valor das chaves na minha matriz de associação, o resultado é sempre 0.

Abaixo, meu código de amostra

declare -A list_a list_b
list_a=( [a]=1 [b]=2)
list_b=( [c]=3 [d]=4)
master_list=(list_a list_b)

for thelist in "${master_list[@]}"
do
   for key in "${!thelist[@]}"
   do
     #it show be printing out the keys of the associative array
     echo "the key is: $key"
   done
done

Output:
the key is: 0
the key is: 0

Alguma ideia do problema?

    
por Lian Eng 19.03.2018 / 15:06

2 respostas

1

Para expandir a indireção da matriz, a string [@] deve fazer parte da variável. Funciona para os valores:

for thelist in "${master_list[@]}" ; do
    reallist=$thelist[@]
    for key in "${!reallist}" ; do
        echo "the key is: $key"
    done
done

Para as chaves, não vejo nada sem eval .

for thelist in "${master_list[@]}" ; do
    eval keys=('"${!'$thelist'[@]}"')
    for key in "${keys[@]}" ; do
        echo "the key is: $key"
    done
done

Tanto quanto você tem certeza de que a master_list contém apenas nomes de variáveis, ela deve ser segura.

    
por 19.03.2018 / 15:21
0

É divertido jogar com , mas o bash parece ter alguns questões para seguir sua imaginação;)

list_a=( 1 2 )
list_b=( 3 4 )

for key in "${list_a[@]}" "${list_b[@]}"; do
  echo "the key is: $key"
done

Saída:

the key is: 1
the key is: 2
the key is: 3
the key is: 4
    
por 19.03.2018 / 15:17