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

  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 671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 671
    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 671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 671
    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 372
    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 372
    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?

  9. #9
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 372
    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 372
    Par défaut
    je parle du fait de ne pas encadrer une variable de guillemets lorsqu'on la teste.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 671
    Par défaut
    cela ne s'applique en effet que aux variables dont on est sûr qu'elles existent et que ce sont des nombres. Cela s'applique donc parfaitement à $#.
    mais, s'il y a le moindre doute, il faut toujours mettre des guillemets. TOUJOURS.

    quoi qu'il en soit, cependant, les guillemets sont facultatifs entre crochets doubles.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    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
    quoi qu'il en soit, cependant, les guillemets sont facultatifs entre crochets doubles.
    mais shellcheck et le plugin de vim Syntastic, qui sont non-humains et limités, le signalent comme une erreur.

    Merci à vous

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 671
    Par défaut
    un petit exemple parlant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ foo="bar baz" patt="*baz"
    $ [[ "$foo" == "$patt" ]]; echo $?
    1
    $ [[ $foo == $patt ]]; echo $?
    0
    Citation Envoyé par man bash
    Toute partie du motif peut être protégée pour la forcer à correspondre en tant que chaîne.
    Any part of the pattern may be quoted to force the quoted portion to be matched as a string.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    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
    OK

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