Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/10/2011, 15h26   #1
Invité de passage
 
Inscription : juillet 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 9
Points : 0
Points : 0
Par défaut Problème avec la substitution de commandes

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 :
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 :
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 :
1
2
3
$ eval echo \$j${n} > /tmp/toot
$ cat /tmp/toot
toto
Maintenant en utilisant $ ça marche:

Code :
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
essomba84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 16h00   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

il semblerait que l'anti-slash n'est pas interprété de la même manière : il faut le protéger entre `` : J=`eval echo \\$j$n`.

deux remarques :
- pourquoi une forme ancienne de substitution de commande ?
- es-tu sûr de la pertinence de numéroter tes variables (si c'est pour du bash, utilise plutôt un tableau) ?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 16h07   #3
Invité de passage
 
Inscription : juillet 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 9
Points : 0
Points : 0
Citation:
Envoyé par N_BaH Voir le message
Bonjour,

il semblerait que l'anti-slash n'est pas interprété de la même manière : il faut le protéger entre `` : J=`eval echo \\$j$n`.
Effectivement, comme ça, ça marche. C'est documenté quelque part que l'\ ne marche pas pareil avec `` que partout ailleurs ?

Citation:
Envoyé par N_BaH Voir le message
deux remarques :
- pourquoi une forme ancienne de substitution de commande ?
habitude

Citation:
Envoyé par N_BaH Voir le message
- es-tu sûr de la pertinence de numéroter tes variables (si c'est pour du bash, utilise plutôt un tableau) ?
Je suis sûr que ce n'est pas pertinent C'est juste pour tester ...

Merci !

Laurent
essomba84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 17h04   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
oui, ici, il me semble.

et une façon intéressante de faire ici
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 18h53   #5
Invité de passage
 
Inscription : juillet 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 9
Points : 0
Points : 0
merci beaucoup N_BaH !

Laurent
essomba84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h12.


 
 
 
 
Partenaires

Hébergement Web