Forum Programmation.shell Petite question sur la programmation bash

Posté par  .
Étiquettes : aucune
0
28
avr.
2005
Salut !

J'ai une question qui me hante depuis un petit bout de temps.
Voila mon probleme :

J'ai deux variables :

[code]
foo="foo"
bar="bar"
[/code]

Et dans mon script une autre variable va prendre comme valeur suivant certaines conditions le nom soit de la premiere variable soit de la seconde variable.

ex :
[code] [ "$machin" == "truc bidule" ] && var="foo" [/code]

Et dans la suite de mon code j'aimerais pouvoir affichier la valeur de la variable dont le nom est dans la variable 'var'.

du genre :
[code] echo $$var [/code]
(je sait ça marche pas. C'est un exemple)

J'espere que mon argumentation est claire :| et que je n'est pas perdu tout le monde.

Bon ben voila mon petit probleme.
Si quelqu'un a une suggestion.
  • # Tu es sur ?

    Posté par  (site web personnel) . Évalué à 1.

    Il me semblais que $$var fonctionné.
    Essai de faire ${$var}
    Je n'ai pas de shell sous la main pour tester ca (on bosse pas forcément avec les outils qu'on veut)
  • # Une méthode

    Posté par  (site web personnel) . Évalué à 2.

    y'en a peut être d'autres, mais ça ça marche :

    damien@Ubuntu ~ $ var="yo"
    damien@Ubuntu ~ $ yo="pas yo"
    damien@Ubuntu ~ $ echo "\$$var"
    damien@Ubuntu ~ $ eval echo "\$$var"

    https://damien.pobel.fr

    • [^] # Re: Une méthode

      Posté par  (site web personnel) . Évalué à 3.

      whoops j'ai oublié les résultats..., je recommence donc :

      damien@Ubuntu ~ $ var="yo"
      damien@Ubuntu ~ $ yo="pas yo"
      damien@Ubuntu ~ $ echo "\$$var"
      $yo
      damien@Ubuntu ~ $ eval echo "\$$var"
      pas yo


      c'est plus clair comme ça :)

      https://damien.pobel.fr

  • # indirection.

    Posté par  . Évalué à 1.

    en bash c'est ${!var} i.e:

    X=value
    INDIR=X
    echo ${!INDIR}
    value

    version courte de l'eval qui evite de repasser par toute les phases d'expansions, substitutions etc.
  • # un peu plus compliquer

    Posté par  . Évalué à 1.

    Tout d'abord merci pour vos reponse qui m'ont beaucoup aidée.
    Et si au lieu d'affichier la variable dont on connais que le nom ou veux modifier sa valeur :

    du genre :

    #!/bin/bash

    foo="foo"

    [ true ] && var="foo"

    #echo "\$$var"
    #eval echo "\$$var"
    #echo ${!var}

    #si je veux mettre la valeur "bar" dans foo
    $var="bar"

    eval echo "\$$var"

    Bon je sait ça marche pas, mais j'ai tester pas mal de truc et je trouve pas.

    Bash'

Suivre le flux des commentaires

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