Interprêter dynamiquement une variable sous UNIX

Résolu/Fermé
enfinbref94 Messages postés 12 Date d'inscription lundi 17 février 2014 Statut Membre Dernière intervention 27 mai 2014 - Modifié par enfinbref94 le 27/05/2014 à 13:46
enfinbref94 Messages postés 12 Date d'inscription lundi 17 février 2014 Statut Membre Dernière intervention 27 mai 2014 - 27 mai 2014 à 14:50
Hello à tous !

J'ai une liste de variables et pour chaque variable, je souhaite que UNIX interprête chaque variable....

Le code :

FOLDER="SOFT_APPLI BINSFT_APPLI CONF_APPLI"
### FOLDER = Liste de variables

for LST in 'echo ${FOLDER}'
do
echo ${LST}
### => SOFT_APPLI puis BINSFT_APPLI puis CONF_APPLI

### Concatène un "$" pour déclarer à UNIX que c'est une variable
VAR="$"${LST} ### Attendu $SOFT_APPLI puis $BINSFT_APPLI puis $CONF_APPLI

### Comment forcer UNIX à interprêter cette variable ?
### Pour info : $SOFT_APPLI = /applix/WA/.....

echo ${VAR}
### Résultat = $SOFT_APPLI
### Attendu = /applix/WA/.....
done

Merci pour votre aide.

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
27 mai 2014 à 14:07
Salut,

$ A="Bonjour";B="Salut";C="Bye Bye"

$ D="A B C"

$ for i in ${D[@]}; do echo "${i}";done
A
B
C

$ for i in ${D[@]}; do echo "${!i}";done
Bonjour
Salut
Bye Bye


;-))
0
salut zipe31,

D
n'est pas un tableau.
ça semble fonctionner parce que
${D[@]}
n'est pas entre guillemets (ce qui devrait ne jamais être le cas = les tableaux devraient toujours être entre guillemets ;)).
D=( A B C )
mais un tableau n'est pas nécessaire.
for i in $D; do echo "${!i}"; done
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
27 mai 2014 à 14:44
Salut qcqcpQ,

D
n'est pas un tableau.
Oups, effectivement, shame on me ;-[

mais un tableau n'est pas nécessaire.
for i in $D; do echo "${!i}"; done
Exact. Merci ;-))
0
enfinbref94 Messages postés 12 Date d'inscription lundi 17 février 2014 Statut Membre Dernière intervention 27 mai 2014
27 mai 2014 à 14:50
J'ai trouvé !!!!!

Faut faire un eval "echo ${VAR}"

Script final :
FOLDER="SOFT_APPLI BINSFT_APPLI CONF_APPLI"
### FOLDER = Liste de variables

for LST in 'echo ${FOLDER}'
do
echo ${LST}
### => SOFT_APPLI puis BINSFT_APPLI puis CONF_APPLI

### Concatène un "$" pour déclarer à UNIX que c'est une variable
VAR="$"${LST} ### Attendu $SOFT_APPLI puis $BINSFT_APPLI puis $CONF_APPLI

echo $VAR
### Comment forcer UNIX à interprêter cette variable ?
### Ex : echo $SOFT_APPLI => /applix/WA/.....
eval "echo ${VAR}"
done
0