Palavras-chave: shell, variável dentro de variável, eval
Às vezes precisamos pegar o conteúdo de uma variável cujo nome está contido em outra variável. Será mostrado algumas maneiras de realizar esta tarefa:
$ A=XXX $ B=A $ echo $B A $ echo ${!B} XXX $ eval echo \\$$B XXX $ eval echo '$'$B XXX
Exemplo prático:
#!/bin/bash VERDE="echo -en \\e[1;32m" AZUL="echo -en \\e[1;36m" VERMELHO="echo -en \\e[1;31m" NORMAL="echo -en \\e[0;39m" # função que imprime um texto colorido imprime_colorido() { eval \\$$1 # seta para a cor passada (primeiro parâmetro) shift echo $* # imprime o texto $NORMAL # volta para a cor padrão } imprime_colorido VERDE texto em verde imprime_colorido AZUL texto em azul imprime_colorido VERMELHO texto em vermelho
Outra situação é quando precisamos obter o conteúdo de uma variável cujo pedaço do nome está contido em outra variável:
$ passo1=codificar $ passo2=testar $ i=1 $ eval echo \\$passo$i codificar $ i=2 $ eval echo '$passo'$i testar $ tmp=passo$i # usando uma variável temporária $ echo ${!tmp} testar $ for i in 1 2; do eval echo passo$i = '$passo'$i; done passo1 = codificar passo2 = testar
how use this with arrays?
i have
b1=(10 20 30)
b2=(40 50 60)
b3=(70 80 90)
and i was wondering if a single for loop could give me the result below
b1[1] = 10
b1[2] = 20
b1[3] = 30
b2[1] = 40
b2[2] = 50
b2[3] = 60
b3[1] = 70
b3[2] = 80
b3[3] = 90
thanks anyway…