VAR1=ABC; VAR2=XYZ; VAR3=PQR;
Je veux imprimer la valeur de VAR1, VAR2 et VAR3 dans une boucle for. S’il vous plaît aider!
En for loop
, j’essaie de faire echo $VAR$i
O / P attendu:
ABC XYZ PQR
Sortie réelle:
1 2 3
Utilisez un tableau:
VAR[1]=ABC VAR[2]=XYZ VAR[3]=PQR for i in 1 2 3 ; do echo ${VAR[i]} done
Ou utilisez la variable indirection:
VAR1=ABC VAR2=XYZ VAR3=PQR for i in 1 2 3 ; do name=VAR$i echo ${!name} done
Vous pouvez le faire comme ceci:
for i in 1 2 3 do eval "echo \$VAR${i}" done
Le point clé est la commande eval
.
$ VAR1=ABC; VAR2=XYZ; VAR3=PQR; $ for i in 1 2 3; do eval "echo \$VAR${i}"; done ABC XYZ PQR
echo "${VAR1}${VAR2}${VAR3}"
Aussi simple que cela. Je ne pense pas qu’il soit logique de créer des cycles inutiles pour concaténer plusieurs valeurs dans une chaîne.
Au lieu de
echo $ VAR $ i
en boucle faire
varx = $ varx $ var $ i
et initialiser varx en tant que chaîne vide et à la fin do
echo $ varx
Ceci est pour l’impression sans espace comme le suggère la question.