Subtituer le nom d'une variable par son contenu

Subtituer le nom d'une variable par son contenu - Shell/Batch - Programmation

Marsh Posté le 14-02-2005 à 16:05:37    

Je voudrais faire un truc de ce genre  
 

Code :
  1. VERSION="LOT3"
  2. LIVRAISON_LOT3="oui"
  3. echo ${echo "LIVRAISON_"$VERSION}


 
et que le resultat me renvoi "oui".  
 
Pour etre plus clair, j'ai une chaine et une variable (LIVRAISON_"$VERSION) qui doivent devenir une variable LIVRAISON_LOT3  
 
Comment faire ?

Reply

Marsh Posté le 14-02-2005 à 16:05:37   

Reply

Marsh Posté le 15-02-2005 à 10:03:36    

Code :
  1. eval echo \$`echo LIVRAISON_$VERSION`

Reply

Marsh Posté le 21-02-2005 à 14:55:42    

je voulais juste vous dire merci tous les 2, ca fait des plombes que je cherche à faire exactement la même chose !!
Merci donc :-) (ca marche!)

Reply

Marsh Posté le 21-02-2005 à 15:50:56    

c'est qui les deux ? il n'y a que moi qui ait répondu ;)

Reply

Marsh Posté le 21-02-2005 à 16:10:40    

merci à toi et à celui qui a posé la question que j'avais en tête!!!  
Sans lui tu n'y aurais jamais répondu ;) ;)

Reply

Marsh Posté le 21-02-2005 à 16:12:07    

ah ok :jap:

Reply

Marsh Posté le 21-02-2005 à 16:31:06    

ben tiens tant que tu es là, pourrais tu encore m'aider s'il te plait?
Dans mon cas, le résultat de la commande que tu nous as fournie doit me donner un mot de passe, que je souhaite utiliser pour faire un ftp:
 
ftp -n adresse << !
user $user motdepasse
....
!
Comment faire pour integrer le resultat de cette grande commande dans une autre commande?!!


Message édité par Carott' le 21-02-2005 à 16:33:08
Reply

Marsh Posté le 21-02-2005 à 17:05:47    

pour appeler une autre commande, tu peux faire un eval ou mettre la commande enter backstick :

Code :
  1. eval "commande"
  2. `commande`


par contre pour le client FTP de base je ne suis pas sûr qu'il soit possible de by-passer le mode interactif, à tester

Reply

Marsh Posté le 21-02-2005 à 17:18:15    

si on reprend l'exemple de guda, il faudrait que je fasse:
ftp -n adresse << !  
user $user `eval echo \$`echo LIVRAISON_$VERSION``  
....  
!  
??  
Mais ca ne marche pas...
Et si je veux faire rentrer eval echo \$`echo LIVRAISON_$VERSION` dans une variable je devrais faire:
mot_de_passe=`eval echo \$`echo LIVRAISON_$VERSION`` ??
Ca marche pas non plus!  :sweat:


Message édité par Carott' le 21-02-2005 à 17:18:42
Reply

Marsh Posté le 21-02-2005 à 17:25:47    

vérifie en ligne de commande sans faire de script, moi je pense que ca bloque car le mot de passe doit être saisie en mode intéractif

Reply

Marsh Posté le 21-02-2005 à 17:25:47   

Reply

Marsh Posté le 21-02-2005 à 17:50:52    

non, ca marche avec le mot de passe directement en ligne de commande sans passer par l'interactif.
En fait, sans parler de ftp, si je fait  
mot_de_passe=`eval echo \$`echo LIVRAISON_$VERSION``  
puis
echo $mot_de_passe
il gueule: ksh: LIVRAISON_LOT3:  not found
alors que j'ai bien déclaré toutes les variables :-(

Reply

Marsh Posté le 22-02-2005 à 09:05:41    

Code :
  1. mot_de_passe=`eval echo '$LIVRAISON_LOT'$VERSION`

Reply

Marsh Posté le 22-02-2005 à 10:17:00    

Merci couak, t'es trop fort! Ca marche enfin.

Reply

Marsh Posté le 24-02-2005 à 13:49:47    

couak a écrit :

Code :
  1. eval echo \$`echo LIVRAISON_$VERSION`



 
Bonjour couak,
c'est totalement inutile de mettre un "echo" entre backquottes. Le shell exécute l'instruction placée entre les backquottes et remet le résultat affiché par l'instruction à la place.
Ce serait comme faire

Code :
  1. `echo date`


au lieu de taper directement

Code :
  1. date


 
Autrement dit, la syntaxe

Code :
  1. eval echo \$`echo LIVRAISON_$VERSION`

peut être utilement réduite en

Code :
  1. eval echo \$LIVRAISON_$VERSION

 ;)

Reply

Marsh Posté le 24-02-2005 à 13:54:10    

Sve@r a écrit :

Bonjour couak,
c'est totalement inutile de mettre un "echo" entre backquottes. Le shell exécute l'instruction placée entre les backquottes et remet le résultat affiché par l'instruction à la place.
Ce serait comme faire

Code :
  1. `echo date`


au lieu de taper directement

Code :
  1. date


 
Autrement dit, la syntaxe

Code :
  1. eval echo \$`echo LIVRAISON_$VERSION`

peut être utilement réduite en

Code :
  1. eval echo \$LIVRAISON_$VERSION

 ;)


effectivement :) je m'en souviendrai la prochaine fois que je ferais du shell ;)

Reply

Marsh Posté le 07-01-2006 à 20:01:21    

bon, je me reponds a moi meme... ( cest toujours quand on fini par demander la question qu'on trouve...)
 


foo=2;
eval "out=\$$foo";
echo $out; #affiche l'argument 2


 
 
Merci moi  :pt1cable:  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed