Comment faire changer une variable en fonction de for

Résolu
Bonjour,
Voilà mon script de test:
#!/bin/bash
MAC='a4:ba:db:01:01:01'
MACWIFI='1c:af:f7:02:02:02'
for j in MAC MACWIFI
do
MACTest=$(echo "\$$j")
echo $MACTest
done;

j'essai de faire apparaître l'adresse MAC correspondant au cycle de la boucle for:
quand $j = MAC alors MACTest doit être égale à "a4:ba:db:01:01:01"
et quand $j = MACWIFI alors MACTest doit être égale à "1c:af:f7:02:02:02"

Je pense avoir un problème de syntaxe avec : MACTest=$(echo "\$$j")
Même avec MACTest="\$$(echo $j)" cela m'affiche toujours "$MAC" et "$MACWIFI"

3 réponses

  1. Contributeur
    hello
    il manque un eval
    $ cat f1
    #!/bin/bash 
    
    MAC='a4:ba:db:01:01:01'
    MACWIFI='1c:af:f7:02:02:02'
    for j in MAC MACWIFI
    do
    MACTest=$(eval echo \$$j)
    echo $MACTest
    done;
    
    $ ./f1
    a4:ba:db:01:01:01
    1c:af:f7:02:02:02
    $ 
    
    0
    1. Contributeur
      Salut,

      Mieux vaut faire avec l'indirection des variables, "eval" étant assez mal considéré ;-(

      $ cat foo.sh 
      #!/bin/bash 
      
      MAC='a4:ba:db:01:01:01'
      MACWIFI='1c:af:f7:02:02:02'
      for j in MAC MACWIFI
      do
      MACTest="$j"
      echo "${!MACTest}"
      done
      
      $ ./foo.sh 
      a4:ba:db:01:01:01
      1c:af:f7:02:02:02
      
      $

      0
      1. Contributeur
        effectivement, c'est du sh qui ne connait pas ${!var}
        0
      2. Merci pour l'info, je ne connaissais pas!
        0
    2. salut,

      lsda26 utilise bash, alors il est effectivement mal venu de lui recommander eval.

      En sh, pour ne pas recourir à eval, on peut passer par un sous-shell
      #!/bin/sh
      
      MAC='a4:ba:db:01:01:01'
      MACWIFI='1c:af:f7:02:02:02'
      
      (set -- "$MAC" "$MACWIFI"; for i do echo "$i"; done)

      Et en bash, on peut utiliser un tableau associatif.
      #!/bin/bash
      declare -A MACwi=( [re]='a4:ba:db:01:01:01' [fi]='1c:af:f7:02:02:02' )
      for i in "${!MACwi[@]}"; do echo "$i = ${MACwi[$i]}"; done


      enfin, n'importe quoi plutôt que de préconiser eval.
      0
      1. Contributeur
        Salut QQCQCPQ,

        il est effectivement mal venu de lui recommander eval
        Toi aussi t'as été frappé par les foudres de N_BaH ? ;-DD
        0
      2. c'est qu'on a probablement eu le même degré de lecture du wiki de Greg Wooledge (page, qui, d'ailleurs, vient d'être mise à jour par Chris Johnson; dans mon souvenir elle était (la page ;)) plus stricte)
        0
      3. Contributeur
        Il y a des années que j'ai son site en bookmark, tout comme ces pots de http://bash-hackers.org/wiki/doku.php? ;-)
        0

    Discussions similaires

    couleur personnage

    9 réponses