Forum Programmation.shell un peu plus compliquer

Posté par  .
Étiquettes : aucune
0
28
avr.
2005
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'
  • # pas si compliqué ....

    Posté par  . Évalué à 3.


    #!/bin/bash

    foo="foo"
    var="foo"

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

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


    ce qui renvoie :


    bar
    bar
    bar


    Le truc consiste à faire la subsitution du nom de variable par son contenu avant d'évaluer l'expression

    ps : s/compliquer/compliqué/ entre autres ... ;-)
    pps : ceci n'est pas un appel à boire ... quoique :-)
    • [^] # Re: pas si compliqué ....

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

      cd pub
      more beer
    • [^] # Re: pas si compliqué ....

      Posté par  . Évalué à 1.

      Bon je pensait pouvoir me débrouiiler avec cette exemple, mais enfet non car en fet mon script n'est pas avec des variables simple mais avec des tableaux.

      Mon script doit par exemple chercher les paths de certaines extentions que je connais pas à l'avance et les stocker un tableau pour chaques :

      ex : un tableau nommé 'tar' pour toutes les extentions .tar, etc ...

      Je pourrais toutes les stockées dans un seul tableau.
      Ca resoudrait le probleme.
      Mais je n'aime pas détourner les problémes et ca peut toujours servir que ce soit pour moi ou pour autrui.

      Bash'
    • [^] # Re: pas si compliqué ....

      Posté par  . Évalué à 1.

      Script test :

      #!/bin/bash

      var="gz"

      for i in *.gz
      do
      eval ${var[#${!var[*]]}="$i"
      done

      for ((i=0;$i<${#${!var[*]}};i++))
      do
      echo -e " ${${!var[$i]}}"
      done

Suivre le flux des commentaires

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