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.