Variables - Union [dupliquer]
Sep 02 2020
FICH10=primero.sh
FICH20=segundo.sh
for i in 10 20
do
echo $FICH($i) # I want resolved first $i and then resolver var FICH10
done
Je veux d'abord le résoudre $iet le concaténer au FICHrivage et ainsi renvoyer la valeur de $FICH10ou $FICH20mais sans avoir à mettre les nombres, mais ils sont résolus par la boucle
Je n'ai pas résolu avec la réponse asocciate
$ for i in 10 20
> do
> echo $((FICH$i))
> done
ksh: line 3: primero: parameter not set
Réponses
3 choroba Sep 02 2020 at 20:27
Utilisez l'indirection variable:
#!/bin/bash
fich10=primero.sh
fich20=segundo.sh
for i in 10 20 ; do
var=fich$i
echo ${!var}
done
Remarque J'ai utilisé de petites majuscules pour les noms de variables car ce ne sont pas des variables système.
2 glennjackman Sep 02 2020 at 20:43
Avec les versions 4.3+ de bash, vous pouvez utiliser un "nameref":
for i in 10 20; do
declare -n var="FICH$i"
echo "$var"
done
Nous pouvons utiliser evalpour forcer une deuxième série de substitutions de variables, mais comme vous pouvez le voir, ce n'est pas obligatoire. evalest généralement considéré comme trop dangereux à utiliser dans la plupart des cas.