Como encurtar uma lista de nomes de variáveis ​​no bash?

Como encurtar uma lista de nomes de variáveis ​​no bash?

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 printfinstruções não terminam com uma nova linha.

informação relacionada