![](https://secure.gravatar.com/avatar/b14c003d6e06336cbf1be01c4f2d33d6.jpg?s=120&d=mm&r=g)
Salut, bon les gens, faut poster un peu ! même si c'est pour poser des questions :) -- http://asyd.net/home/ - Home Page http://guses.org/home/ - French Speaking (Open)Solaris User Group
![](https://secure.gravatar.com/avatar/b52a9442798d416766ff3130c1a3eeda.jpg?s=120&d=mm&r=g)
Bruno Bonfils wrote:
Salut,
bon les gens, faut poster un peu !
même si c'est pour poser des questions :)
Ca incite à poser une question bête : comment faire du ${$a} en bash ? du genre a=toto; b=a; echo ${$b} qui renverrai toto... Dans le cas qui m'intéresse (parser les paramètres), j'ai résolu le pb avec for i in $(seq 1 $#); do echo ${@:$i:1}; done mais j'ai pas trouvé le cas général... -- Daniel
![](https://secure.gravatar.com/avatar/c21896aca442264af34eb3581fd9552d.jpg?s=120&d=mm&r=g)
Daniel Caillibaud wrote:
Ca incite à poser une question bête : comment faire du ${$a} en bash ?
du genre a=toto; b=a; echo ${$b} qui renverrai toto...
et si tu faisais i=0 for arg in "$@"; do parameters[$i]=$arg i=`expr $i + 1` done Tu peux ensuite faire b=1 echo ${parameters[$b]} Ca te va ?
![](https://secure.gravatar.com/avatar/e8b3dcf26b7b33aa6b6d7eeffea625b9.jpg?s=120&d=mm&r=g)
Guillaume Desclaux a écrit :
Daniel Caillibaud wrote:
Ca incite à poser une question bête : comment faire du ${$a} en bash ?
du genre a=toto; b=a; echo ${$b} qui renverrai toto... Je suis tombé par hasard sur la réponse ce matin :
#!/bin/bash aurevoir=plop bonjour=aurevroir message=bonjour echo "\$bonjour : ${bonjour}" # aurevroir echo "\$message : ${message}" # bonjour echo "\${!message} : ${!message}" # aurevroir Donc ${! si je ne me trompe. (par contre comme le montre l'exemple la substitution ne se fait que sur un niveau) -- Erwan Le Gall
![](https://secure.gravatar.com/avatar/c21896aca442264af34eb3581fd9552d.jpg?s=120&d=mm&r=g)
#!/bin/bash
aurevoir=plop bonjour=aurevroir message=bonjour
echo "\$bonjour : ${bonjour}" # aurevroir
echo "\$message : ${message}" # bonjour
echo "\${!message} : ${!message}" # aurevroir
Donc ${! si je ne me trompe. (par contre comme le montre l'exemple la substitution ne se fait que sur un niveau)
Bien vu !! Je ne connaissais pas cette syntaxe en bash
![](https://secure.gravatar.com/avatar/b52a9442798d416766ff3130c1a3eeda.jpg?s=120&d=mm&r=g)
Guillaume Desclaux wrote:
Daniel Caillibaud wrote:
Ca incite à poser une question bête : comment faire du ${$a} en bash ?
du genre a=toto; b=a; echo ${$b} qui renverrai toto...
et si tu faisais
i=0 for arg in "$@"; do parameters[$i]=$arg i=`expr $i + 1` done
Tu peux ensuite faire b=1 echo ${parameters[$b]}
Ca te va ?
Apparemment (j'ai lu pas mal de truc, dont http://www-phase.c-strasbourg.fr/inform/linux/cours/user/node12.html#SECTION... avec un tableau qui résume bien), il n'y a pas de solution directe à un nom de variable lui-même variable, comme dans
$ a=toto; b=tata; c=titi; var=b; echo ${${var}} bash: ${${var}}: bad substitution
mais ta solution permet de contourner le pb en utilisant des index
$ val[0]=toto; val[1]=tata; val[2]=titi; i=2; echo ${val[$i]} titi
et on peut même avoir des clés alphanumérique
$ val[a]=toto; val[b]=tata; val[c]=titi; var=b; echo ${val[$var]} titi
Ce qui répond à mon pb initial. -- Daniel
![](https://secure.gravatar.com/avatar/b52a9442798d416766ff3130c1a3eeda.jpg?s=120&d=mm&r=g)
Daniel Caillibaud wrote:
et on peut même avoir des clés alphanumérique
$ val[a]=toto; val[b]=tata; val[c]=titi; var=b; echo ${val[$var]} titi ^^^^ Donc ça marche pas !
Ce qui répond à mon pb initial.
Ben non, c'est Erwan qui avait donné la solution 1/2h avant ce post
$ a=toto; b=tata; c=titi; var=b; echo ${!var} tata
-- Daniel
participants (4)
-
Bruno Bonfils
-
Daniel Caillibaud
-
Erwan Le Gall
-
Guillaume Desclaux