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] Afficher variable et nom de variable


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Médecin
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut [bash] Afficher variable et nom de variable
    Bonjour,
    J'ai écrit une fonction «DEBUG» utilisable dans un script bash qui affiche le mot DEBUG, son rang dans la liste des DEBUG, le numéro de ligne sur laquelle il est lancé et un commentaire. Le commentaire suffisant est le plus souvent de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "mavariable=$mavariable
    "

    qui affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEBUG 6 ligne:98 mavariable=SaValeur
    Je cherche à remplacer le commentaire par le seul nom de la variable, « mavariable » pour que le commentaire soit composé automatiquement comme ci dessus.

    Je n'aurais plus qu'à écrire:
    DEBUG "mavariable", et au lancement du script s'afficherait la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEBUG 6 ligne:98 mavariable=SaValeur
    Ma question est, comment récupérer le nom de la variable en plus de sa valeur, passé comme argument à la fonction DEBUG pour l'afficher ?

    J'ai essayé diverses formes avec ${$1} ou avec eval $1 et autres combinaisons, en vain.
    Par exemple, la ligne commentée suivante avec eval ne fonctionne pas: ($1 contient le nom d'une variable, sans son opérateur «$»):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if [[ "$#" -gt 0 ]] ; then
            COMMENT="$1"                                         # renvoie RACINE
    #        eval "echo COMMENT = $COMMENT" # Plante la fonction (et le script qui la contient)
        fi

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 668
    Par défaut
    Bonjour,

    voir l'option -n
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Médecin
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut Réponse trouvé dans Guide avancé d'écriture des scripts Bash ... Mendel Cooper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if [[ "$#" -gt 0 ]] ; then
            COMMENT="$1"
           eval "VALEUR=\$$COMMENT"
           echo "$COMMENT=$VALEUR"
        fi
    C'est donc l'écriture \$$COMMENT, «tout simplement» passée à eval.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Médecin
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    voir l'option -n
    je teste aussi cette solution, aussi efficace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if [[ "$#" -gt 0 ]] ; then
            COMMENT="$1"
           declare -n "VALEUR=$1"
           echo "$COMMENT=$VALEUR"
        fi
    La fonction declare (dont j'ignorais l'action -n) est décrite juste avant la solution eval dans le Guide avancé de Mendel Cooper

    Merci N_BaH

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 668
    Par défaut
    un nombre, étant une donnée insécable, n'a pas besoin de guillemets.
    un test simple ne requiert pas les crochets doubles : test $# -gt 0 est suffisant.
    on pourrait aussi faire if (($#)).
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Médecin
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut
    Encore merci N_BaH pour cette leçon.
    Ce sont des remarques qui me font prendre conscience que je ne respecte pas suffisamment bash comme un vrai langage, qui ne mérite pas que j'y ajoute mes lourdeurs de béotiens.
    Mais je suis un béotien!
    Néanmoins j'apprécie la beauté partout où je le peux, et vos 2 suggestions y conduisent.

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 371
    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 371
    Par défaut
    Ceci est vrai si la variable existe, n'est pas vide et ne contient pas que des espaces...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Médecin
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut
    Bonjour disedorgue

    Le «ceci» s'applique-t'il de la même façon aux 2 propositions?

Discussions similaires

  1. Afficher variable javascript dans un tableau
    Par Galaad dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/05/2007, 13h56
  2. [Borland 6] Afficher variables dans TComboBox
    Par grmi91 dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/04/2007, 20h41
  3. afficher variable de requete sql dans datareport
    Par liquid dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/03/2007, 11h01
  4. afficher variable en dehors de sa boucle
    Par metatron dans le forum Langage
    Réponses: 6
    Dernier message: 23/08/2006, 18h21
  5. [XPATH] afficher variable javascript ds xpath
    Par claireenes dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 07/04/2006, 10h39

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