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

Linux Discussion :

[Shell] variable dans une variable


Sujet :

Linux

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 160
    Points
    160
    Par défaut [Shell] variable dans une variable
    Bonjour,

    Je me retrouve face à un petit "problème" auquel il me semble avoir déjà été confronté, mais c'est si loin que je ne me souviens plus de la solution...

    Soit le bout de script suivant :

    Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    toto="echo blah"
    tata='$toto'
     
    echo $tata # affiche "$toto"
    eval $tata # affiche "blah"

    Ce que j'aimerais, c'est pouvoir afficher le contenu toto via tata.

    P.S.: j'ai encadré le code avec la balise perl uniquement pour avoir des jolies couleurs

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 582
    Points : 19 453
    Points
    19 453
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    toto=blah
    tata=toto
    echo "${!tata}"
    blah

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 160
    Points
    160
    Par défaut
    Ok, merci.

    Bon, dans l'idée, je suis obligé de conserver mon

    (avec le $) parce que je passe cette chaîne à eval.
    Le truc, c'est que j'utilise cette même chaîne pour faire un log, et que "$toto", dans un log, c'est pas très parlant ^^

    Mais je dois pouvoir m'en sortir avec un petit sed et le ${!...} que tu m'indiques.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 040
    Points
    31 040
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BSans Voir le message
    Bonjour,

    Je me retrouve face à un petit "problème" auquel il me semble avoir déjà été confronté, mais c'est si loin que je ne me souviens plus de la solution...

    Soit le bout de script suivant :

    Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    toto="echo blah"
    tata='$toto'
     
    echo $tata # affiche "$toto"
    eval $tata # affiche "blah"

    Ce que j'aimerais, c'est pouvoir afficher le contenu toto via tata.

    Bon, dans l'idée, je suis obligé de conserver mon

    (avec le $) parce que je passe cette chaîne à eval.
    Le truc, c'est que j'utilise cette même chaîne pour faire un log, et que "$toto", dans un log, c'est pas très parlant ^^

    Mais je dois pouvoir m'en sortir avec un petit sed et le ${!...} que tu m'indiques.

    Ben pourtant tu as déjà donné la solution initiale correcte => eval !!!???!!!

    Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    toto="blah"
    tata='$toto'
    # tata="\$toto" => fonctionne aussi
     
    eval echo $tata

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ben pourtant tu as déjà donné la solution initiale correcte => eval !!!???!!!
    En fait, eval ne me convenait pas pour ça.
    Mon application génère des variables exemple :

    CMD_TOTO="/opt/mon_appli/toto.sh"

    J'utilise bien eval pour exécuter la commande, mais je souhaitais faire une trace d'exécution avant ça.

    Je ne sais pas à l'avance combien, ni quelles variables CMD_ j'aurai, donc j'ai une fonction qui me génère ma "chaîne d'exécution".

    J'avais donc dans mes traces :

    "$CMD_TOTO blah blih bloh"

    Mais je voulais :

    "/opt/mon_appli/toto.sh blah blih bloh"

    Et donc, avec ${!...} ça fonctionne très bien.

    Merci à vous

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

Discussions similaires

  1. Introduire une variable dans une variable
    Par benramin31 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 17/02/2012, 11h30
  2. Recuperer le nom d'une variable dans une variable String
    Par aliwassem dans le forum Langage
    Réponses: 11
    Dernier message: 23/10/2009, 12h38
  3. Réponses: 3
    Dernier message: 26/09/2008, 10h41
  4. Réponses: 2
    Dernier message: 11/07/2007, 14h28
  5. shell script: placer une variable dans le clavier
    Par kaukos dans le forum Linux
    Réponses: 6
    Dernier message: 30/06/2007, 07h42

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