Bonjour à tous,

je rencontre un problème de substitution de commandes. J'ai plusieurs variables nommées j1, j2, j3, j4 ...

J'ai une variable nommée n et grâce à n je voudrais déréférencer j1, j2, ... jn. Pour faire ça, j'utilise la commande eval. Exemple:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$ j1=toto
$ n=1
$ eval echo \$j${n}
toto
Donc ça marche. Maintenant je voudrais stocker la résultat de cette commande dans la variable J. Je fais donc:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$ J=`eval echo \$j${n}`
$ echo $J
1
Et là je ne comprends pas pourquoi j'ai 1 dans J alors que j'ai bien toto dans stdout !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$ eval echo \$j${n} > /tmp/toot
$ cat /tmp/toot
toto
Maintenant en utilisant $ ça marche:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$ J=$(eval echo \$j${n})
$ echo $J
toto
Quelqu'un peut il m'expliquer:
- la différence entre $() et ``
- pourquoi ça ne marche pas avec ``

Merci !

Laurent

Edit: ortho