
Em um script de shell, tenho uma lista de variáveis que ordenei como $a, $b, $c, etc. Gostaria de imprimir essas variáveis sem precisar listar todas as variáveis. Meu código atual é o seguinte:
a=1
b=2
c=3
d=4
e=5
f=6
g=7
for x in $a$b$c$d$e$f$g
do
echo "$x"
done
Posso abreviar $a$b$c$d$e$f$g para algo que se refere a $a até $g?
Responder1
Usando "mal" eval
:
eval echo \"$(printf '$%s' {a..g})\"
Observe que usei aspas de escape, necessárias para a saída correta se suas variáveis contiverem caracteres de espaço.
Ou use o loop for corrigido doprimeira resposta:
for x in {a..g}; do printf "${!x}"; done
Ou use um array em seu script. É uma sintaxe diferente, mas é mais fácil de manusear se você precisar de todos os valores de uma vez. Aqui está um pequeno exemplo:
array=(1 2 3 4 x 6)
array+=(7) # add one more
array[4]=5 # modify element at index 4
printf '%s' "${array[@]}"
Observe que as duas últimas printf
instruções não terminam com uma nova linha.