Forum Programmation.shell [BASH] Contenu de variable de variable

Posté par  .
Étiquettes : aucune
0
27
déc.
2006
Bonjour,

Je cherche un moyen de pouvoir stoquer le nom d'une variable dans une autre variable afin de pouvoir la tester.
Exemple :

foo_bar1=test1
foo_bar2=test2
foo_bar3=test3

et lors du deroulement de mon script une variable bar va etre affectuée par une valeur qui va etre soit bar1, bar2 ou bar3 et je voudrais pourvoir utiliser le contenu de foo_bar1 si bar=bar1 etc ...
Je sais pas si j'ai ete clair ou pas mais si une personne a une solution je la veux bien :)
Merci.
  • # man bash, ou google

    Posté par  . Évalué à 0.

    http://pwet.fr/man/linux/commandes/bash


    if $bar=="bar1";
    then foo_bar1;
    else foo_bar ;
    • [^] # Re: man bash, ou google

      Posté par  . Évalué à 1.

      Oui y a cette solution mais le probleme c'est que si tu as 100 var bar differentes c'est pas tres pratique.
      Car dans mon script c'est plutot ca :

      foo1_bar1
      foo1_bar2
      etc ....
      foo10_bar1
      foo10_bar2
      etc ...

      J'avais toujours la solution de decomposer en plusieurs case mais je trouve pas ca trés optimisé.
      • [^] # Re: man bash, ou google

        Posté par  . Évalué à 2.

        La seule solution que j'ai trouvée est d'enlever le "_" entre foo et bar et faire une concatenation :

        tmp=$foo$bar
        echo {!tmp}

        C'est tout nul mais bon ca marche.
        Si quelqu'un a une autre idée?
  • # eval

    Posté par  . Évalué à 5.

    Essaye avec eval:
    # foo_bar1=test1
    # bar=bar1
    # eval resultat=\$foo_$bar
    # echo $resultat
     test1
    
    • [^] # Re: eval

      Posté par  . Évalué à 1.

      Et comment fait ton si foo est une variable aussi .?
      • [^] # Re: eval

        Posté par  . Évalué à 5.

        Ben suffit de mettre la variable $foo:
        # foo=foo5
        # bar=bar1
        # foo5_bar1=test2
        # eval resultat=\$${foo}_$bar
        # echo $resultat
         test2
        
        Faut rajouter les {} autour de foo sinon il évalue $foo_, c'est peut-être ça qui te posait problème?
        • [^] # Re: eval

          Posté par  . Évalué à 2.

          Exactement !!!
          Ca marche ....
          C'est vraiment bien, merci beaucoup pour vos reponse.
          Un grand merci a toi Darkael, tu m'enleve une epinne du pied :)
  • # Indirection et bash

    Posté par  . Évalué à 7.

    Salut,

    La réponse a déjà été donnée il y a quelques jours...

    En bash, tu peux gérer les indirections avec la syntaxe suivante :
    ${!var}

    Ainsi, si $var vaut "foo_bar1", ${!var} est équivalent à $foo_bar1.

    A+
    JJD

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.