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 :

Shell et portée des variables et invocation de fonction via $()


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 49
    Points : 53
    Points
    53
    Par défaut Shell et portée des variables et invocation de fonction via $()
    Bonjour,
    J'ai un fonctionnement bizarre selon que j'appelle directement une fonction ou que je l'invoque via $()

    voici le code d'exemple
    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
    17
    18
    19
    20
    21
    22
    $ cat ./kipu.sh
    #!/bin/sh
     
    x="Z"
     
    f()
    {
    	x="${x}Z"
    	echo "$1$x"
    }
    # affiche AZZ (normal)
    f "A"
    # affiche AZZZ (normal)
    f "A"
     
    v=$(f "A")
    echo $v
    # affiche AZZZZ (normal)
     
    v=$(f "A")
    echo $v
    # affiche AZZZZ ! on attendrait AZZZZZ
    et il produit l'affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ./kipu.sh
    AZZ
    AZZZ
    AZZZZ
    AZZZZ
    Sur le dernier affichage, je devrais avoir 5 'Z' => AZZZZZ
    on dirait que la variable x de f() est local (que la valeur de x est perdue lors du retour de f())

    Quelqu'un aurait une explication ?
    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 462
    Points
    19 462
    Par défaut
    Bonjour,

    non, c'est normal.

    x est "incrémenté" lors de l'appel direct de la fonction,
    mais $() exécute la fonction dans un sous-shell.
    or, un sous-shell ne peut pas modifier une variable dans l'environnement de son parent.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 49
    Points : 53
    Points
    53
    Par défaut [résolu] Shell et portée des variables et invocation de fonction via $()
    ok, je ne savais pas que $() invoquait un sous-shell
    le "man bash" n'est pas explicite à ce sujet (ou je n'ai pas vu l'info)

    merci pour l'info

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

Discussions similaires

  1. Portée des variables: Include dans une fonction
    Par BlindeKinder dans le forum Langage
    Réponses: 9
    Dernier message: 08/02/2011, 18h45
  2. portée des variables en shell
    Par jejeman dans le forum Linux
    Réponses: 6
    Dernier message: 06/06/2010, 18h52
  3. Portée des variables et sous-shell
    Par hacksi dans le forum Linux
    Réponses: 4
    Dernier message: 30/04/2009, 19h55
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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