IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[Bash] Tableaux associatifs : variables dans le nom et la clé


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Par défaut [Bash] Tableaux associatifs : variables dans le nom et la clé
    Bonjour,

    Le probleme est le suivant, j'essaye d'acceder a la valeur d'une case d'un tableau associatif dont le nom du tableau et la cle sont des variables.
    En gros, j'essaye de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a[b]=42
    benchmark=a
    input_size=b
    echo ${${benchmark}[$input_size]}
    Le but est d'afficher 42, mais je n'ai le droit qu'a du "bad substitution"

    Faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var=${benchmark}[$input_size]
    echo $var
    renvoie "a[b]"

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var=${benchmark}[$input_size]
    echo ${!var}
    renvoie "b"

    Merci de votre aide !
    Zilbou

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 390
    Par défaut
    Bonjour,

    Bizarre, chez moi ça fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ a[b]=42
    $ benchmark=a
    $ input_size=b
    $ var=${benchmark}[$input_size]
    $ echo ${!var}
    42
    Ma version de bash (au cas où): 4.1.2

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Par défaut
    Alors, oui, c'est completement fou parce qu'effectivement le bout de code que tu as mis fonctionne chez moi aussi !

    je viens de comprendre que mon probleme etait tout autre.

    Je vous donne les lignes pertinentes du code exact (que j'avais legerement modifie pour que ce soit plus clair, sans consequences croyais-je innocemment)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    benchmark=$1
    number_threads=$2
     
    blackscholes[simsmall]="${number_threads} in_4K.txt prices.txt"
    blackscholes[file]=simsmall
     
        var=${benchmark}[file]
        input_size=${!var}
     
        echo -e "\t\t${input_size}"
        tar xvf ../inputs/${input_size} -C .
     
        var2=${benchmark}[$input_size]
     
        echo "taskset -c ${!var1} ${benchmark} ${!var2} "
    Ce code ne marche pas.

    Et je viens de decouvrir que rajouter "declare -A blackscholes" au tout debut fonctionne. Donc, j'imagine que puisque le tableau est declare, bash, en developpant var2 a reconnu "blackscholes" comme nom de tableau et est alle chercher la valeur.

    Probleme resolu

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 694
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 694
    Par défaut
    je vais porter plainte auprès du Tribunal Pénal International, car la convention de Genève interdit le recours à la torture !

    quand on en arrive là, il faut soit changer de langage, soit réviser son algorithme (de préférence la deuxième solution).

    edit: j'en rajoute une couche pour être bien compris.
    quand les composantes du nom d'une variable/tableau possèdent une partie constante (simsmall, file...), c'est cette partie qui doit servir de nom, et c'est l'indice qui est alors variable !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/08/2007, 15h44
  2. Creation d'une table avec variable dans le nom
    Par 3vilsnake dans le forum Langage SQL
    Réponses: 7
    Dernier message: 30/07/2007, 18h49
  3. Concaténation de variables dans un nom de variables ?
    Par debie1108 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/05/2007, 04h51
  4. Utiliser des variables dans les noms d'objet
    Par Torkan dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 16/03/2007, 00h54
  5. [Tableaux] Récuperer variable dans une fonction
    Par amarcil dans le forum Langage
    Réponses: 12
    Dernier message: 12/02/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo