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 :

Concaténation dans une variable partagée par 2 fonctions


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2011
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 50
    Points : 38
    Points
    38
    Par défaut Concaténation dans une variable partagée par 2 fonctions
    Bonjour,

    J'ai un soucis concernant la concaténation dans une variable et surtout sa portée.

    J'ai un programme principal P1 qui apelle plusieurs fois une fonction P2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    P1 {
     
    P2()
    ...
    P2()
    ...
    echo $var
    }
    Dans la fonction P2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    P2{
    var=" "
    var=$var+$var2 
    }
    Je voudrais qu'à chaque fois qu'on apelle P2 on concatène dans la variable var, la précédente valeur de $var avec une autre valeur $var2.
    A la fin de mon programme P1, le echo $var me renvoi aucune valeur.
    Ces deux fonctions sont dans le même fichier.
    La variable n'est-elle pas visible dans le P1 ? Si oui, coment la rendre exploitable dans P1 ?

    Merci,

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Points : 358
    Points
    358

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

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

    essaye comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    P1() {
     
    P2
    ...
    P2
    ...
    echo $var
    }
    P2() {
    var=" "
    var="$var$var2 " #ou var+="$var2"
    }
    cf. man bash / Fonctions
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre habitué
    Homme Profil pro
    consultant ETL
    Inscrit en
    Septembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : consultant ETL
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2008
    Messages : 97
    Points : 185
    Points
    185
    Par défaut
    en ce qui me concerne, mes tests marchent : var est modifié dans P2 et visible dans P1 :

    Code Shell : 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
     
    #!/bin/ksh
     
    P2(){
     
    var2="+1"
    var="${var}  ${var2}"
    }
     
    P1(){
    echo $var
    P2
    P2
    P2
    echo $var
    }
     
    P1

    et le resultat est

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    -bash-3.2$ ./titi.sh
     
    +1 +1 +1

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2011
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Bonjour à tous,

    Je reviens vers vous car mon echo $var de ma fonction P1 me renvoie systématiquement une valeur nulle, même dans la concaténation si je veux avoir juste une valeur, la variable $var est nulle.

    Dans la fonction P1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    P1 {
    while {
     
       while {
       P2()
       ...  
       P2()
       }
    ...
    }
    echo $var
    }
    Dans la fonction P2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    P2{
    var="$var $var2" 
    }
    J'ai essayé de déclarer les variables avec typeset, avec les accolades ${ }, rien n'y fait.

    De plus, j'ai l'impression qu'à chaque nouvel appel de P2 l'ancienne valeur attribuée dans P2 n'est pas conservée..
    Merci d'avance pour votre aide

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 439
    Points
    19 439
    Par défaut
    affiche le vrai code s'il te plait.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    affiche le vrai code s'il te plait.
    Oui!

    Et aussi: quel shell utilises-tu? (ça peut avoir son importance dans la portée des variables)

Discussions similaires

  1. Encodage de caractère dans une variable passée par POST
    Par DavidAnd dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 18/02/2011, 10h42
  2. Concaténer une variable retourner par une fonction
    Par neogamaes dans le forum MATLAB
    Réponses: 9
    Dernier message: 17/02/2010, 16h49
  3. [POO] Appeler une fonction par son nom dans une variable
    Par whitespirit dans le forum Langage
    Réponses: 16
    Dernier message: 18/06/2008, 11h23
  4. Réponses: 7
    Dernier message: 03/10/2007, 17h58
  5. [Mail] Concaténation dans une variable
    Par Strix dans le forum Langage
    Réponses: 2
    Dernier message: 21/06/2007, 09h15

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