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 :

expansion du shell


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 161
    Par défaut expansion du shell
    Bonjour,

    Je me suis retrouvé confronter à un problème

    soit dans un répertoire les fichier suivants (l'un avec des espaces) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pim pam poum
    pimtoto
    pimtata
    et le bout de script suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    LIST=$(echo p*)
    for arg in $LIST ; do
            echo "[$arg]"
    done
    Le résultat du script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [pim]
    [pam]
    [poum]
    [pimtata]
    [pimtoto]
    Le problème, comment faire pour obtenir le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [pim pam poum]
    [pimtata]
    [pimtoto]
    J'avais penser à changer l'IFS, à passer au bash le paramètre -f mais dans ce cas je n'ai plus d'expansion...

    Je sèche. Si un gourou Unix voix une solution ou m'expliquer pourquoi ce n'est pas possible je suis preneur.

    Merci.

    Fluxy__

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 161
    Par défaut
    Bon j'ai trouvé avec IFS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    IFS=:
    LIST=$(echo "p*")
    for arg in $LIST ; do
            echo "[$arg]"
    done
    ++

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Le IFS ne sert strictement à rien dans ce que tu as fait. Ce qui règle le problème, ce sont les guillemets autour du p*. Pas le IFS.

    Neanmoins la bonne façon de faire est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LIST=p*
    for arg in $LIST
    do
            echo "[$arg]"
    done
    Dans ce code il faut bien comprendre que le p* est expansé au de la ligne for, pas de l'affectation de LIST.

  4. #4
    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
    ou encore...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ls ~/test
    blabla   pim pam poum   pimtata   pimtoto   zoom
    
    for arg in ~/test/p*
       do
          echo "[${arg##*/}]"
    done
    
    [pim pam poum]
    [pimtata]
    [pimtoto]


    edit : la pertinence de ce post ne me parait plus si évidente aujourd'hui.
    Désolé, si je donne l'impression de flooder. Ce n'est pas mon intention.
    Je le supprimerai quand je saurai comment.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 161
    Par défaut
    Exacte, les guillements sont au même titre que la quote et le backslash pour éviter l'expansion par bash.

    J'ai rédiger mon post trop rapidement.

    Merci pour ta précision

    Le echo n'est là qu'a titre d'exemple

    ++

    Fluxy__

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

Discussions similaires

  1. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12
  2. Retour de requete postgresql / Shell Script
    Par doohan dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/06/2003, 18h07
  3. [JTreeTable] expansion/collapse d'un noeud
    Par Hammer dans le forum Composants
    Réponses: 4
    Dernier message: 30/04/2003, 22h58
  4. [SHELL] Icônes associées à des fichiers
    Par agh dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 09/04/2003, 17h04
  5. [Kylix] probleme pour lancer le shell
    Par miky dans le forum EDI
    Réponses: 5
    Dernier message: 13/08/2002, 09h39

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