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 :

Retours chariots fin de variable


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut Retours chariots fin de variable
    Bonjour à tous.

    J'ai une chaîne de caractère récupérée en BDD :

    J'ai une fonction remetVariables, qui me permet de sortir ma chaîne en remplaçant certaines valeurs dedans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function remetVariables
    {
    	STRING=`echo "$1" | sed "s/#/\n/g"`
    	STRING=$(echo "${STRING//'$NAS'/$NAS}")
    	STRING=$(echo "${STRING//'$3'/$3}")
    	STRING=$(echo "${STRING//'$4'/$4}")
    	echo "$STRING"
    }
    Et j'appelle cette fonction comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TEXTE=$(remetVariables "$S" null chaine caractere)
    Le souci c'est que maintenant les retours charriots en fin de variable sont perdus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    bash-3.2$ echo "$TEXTE"
     
    ma chaine
     
    de caractere
    bash-3.2$
    Moi j'aimerais qu'il les gardent !! Comment faire svp ?

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour,

    c'est l'opérateur $() ou `` qui fait disparaître tes retours à la lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function remetVariables
    {
    	STRING=$(echo "${STRING//'$NAS'/$NAS}")
    	STRING=$(echo "${STRING//'$3'/$3}")
    	STRING=$(echo "${STRING//'$4'/$4}")
            sed "s/#/\n/g" <<< "$STRING""
    }
    (non testé, pour des raisons évidentes)

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Merci, en effet j'ai bien vu que le souci venait de là.
    Mais j'ai quand même besoin de faire une redirection dans une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TEXTE=$(remetVariables "$S" null chaine caractere)
    Comment contourner dans ce cas me $() / `` ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    As-tu essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TEXTE="$(remetVariables "$S" null chaine caractere)"

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Bonjour,
    Déjà, il faudrait corriger les autres erreurs, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function remetVariables
    {
    	#Pour remplacer la partie sed, ici on utilise le echo -e pour interpréter le "\n"
    	STRING=$(echo -e "${1//#/\n}")
    	#Pas besoin de echo sauf si tu dois interpréter des caractère d échappement ("\t","\n",..) et dans ce cas ne pas oublier le '-e'    
    	STRING="${STRING//\$NAS/$NAS}"
    	STRING="${STRING//\$3/$3}"
    	STRING="${STRING//\$4/$4}"
    	echo "$STRING"
    }
    J'ai aussi remplacé les '$NAS' '$3' '$4' par \$NAS \$3 \$4 car je suppose que ton but est de remplacer par exemple la chaine "$3" par la valeur de la variable $3, ce qui ne se faisait pas avec la syntaxe initial (le simple quote dans une chaine de caractère n'est qu'un simple caractère).

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Merci jack, mais même chose,
    Disedorgue, si je mets ta fonction voici le résultat, pas d'espace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    bash-3.2$ remetVariables "$S" null chaine caractere
     
    ma chaine
     
    de caractere
    bash-3.2$

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Es-tu sûr que ta chaîne S finit par 2 croisillons?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    il n'y a semble-t-il pas de solution : la substitution de commande "bouffe" les multiples retours à la ligne finaux.

    un contournement consisterait à ajouter un caractère pas, ou peu, utilisé (§ par exemple), et de le supprimer après la dernière substitution de commande.
    ???
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. retour chariot fin de fichier
    Par vince2005 dans le forum Langage
    Réponses: 11
    Dernier message: 16/04/2014, 01h11
  2. Réponses: 2
    Dernier message: 08/07/2011, 10h01
  3. [PHP 5.3] Un retour chariot dans une variable
    Par Ottakar dans le forum Langage
    Réponses: 9
    Dernier message: 01/11/2010, 22h40
  4. Détecter le retour chariot d'une variable post
    Par keub51 dans le forum Langage
    Réponses: 1
    Dernier message: 22/05/2007, 17h05
  5. Retour chariot appliquée à une variable
    Par denis finch dans le forum Langage
    Réponses: 4
    Dernier message: 14/12/2005, 12h07

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