SOS Variable dynamique en bash

Résolu
yinkoh -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je souhaite enregistrer le résultat d'une fonction dans une variable:

idents=(a b c); 
count=${#idents[*]}; 
for ((i=0; i < $count; i++)); do 
    ident=${idents[${i}]}; 
    ${ident}=${i}; 
done


Je souhaiterai que soit crées les variables $a, $b, $c avec les valeurs 0, 1, 2

Comment faire svp ?

3 réponses

  1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    Bonjour,

    Fait simplement un eval de ton affectation :)
    #!/bin/sh
    idents=(a b c);
    count=${#idents[*]};
    for ((i=0; i < $count; i++)); do
    ident=${idents[${i}]};
    eval ${ident}=${i};
    done 
    
    echo $a
    echo $b
    echo $c


    A plus
    0
  2. yinkoh
     
    Grrrrrrr !

    Je pensais l'avoir testé pourtant.

    Merci.
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    #! /bin/bash
    #set -xv
    
    idents=(a b c);
    count=${#idents[*]};
    for ((i=0; i < $count; i++)); do
            ident=${idents[${i}]};
            eval "${ident}=${i}";
    done
    echo "${idents[0]} = $a"
    echo "${idents[1]} = $b"
    echo "${idents[2]} = $c"
    
    $ sh foo.sh
    a = 0
    b = 1
    c = 2
    0