Retourner aux forums || Retourner au forum Programmation.autre

Programmation.autre : Bash et les espaces dans les résultats de commandes

Posté par Calim' Héros (Jabber id, page perso, ) le 22 mars 2005
0
Bonjour

Alors voila, typiquement le script suivant

#!/bin/bash
for fich in $(ls)
do
echo "--$fich--"
done


me donne un résultat pas terrible si il y a un fichier nommé comme ça :
Fichier avec espace


qui me renvoit alors
--Fichier--
--avec--
-espace--


comment faire pour obtenir
--Fichier avec espace


j'ai bien la possibilité de reconstituer la chaîne grâce à la recherche de ^ et de $ mais ça ralonge le scripte de manière non négligeable et ça le rend moins lisible.

J'en appel donc à votre savoir : Il y a t il une manière simple de faire cela?

--
Un petit coup de main, votez pour moi
> Lire le message (6 commentaires, moyenne: 2,5).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

s/\$\(ls\)/\*/

Posté par Antonio Da Silva (page perso, ) le 22/03/2005 à 23:40. (lien). Évalué à 3.


#!/bin/bash
for fich in *
do
 echo "--$fich--"
done

Chez moi marche avec les fichiers avec espace

  • [^]Re: s/\$\(ls\)/\*/

    Posté par Nico (Jabber id, page perso, ) le 23/03/2005 à 07:46. (lien). Évalué à 2.

    Sinon
    #!/bin/bash
    ls | while read fich
    do
    echo "--$fich--"
    done

    fonctionne également et est plus proche de ce que tu souhaitais faire.

  • [^]Re: s/\$\(ls\)/\*/

    Posté par Calim' Héros (Jabber id, page perso, ) le 23/03/2005 à 09:18. (lien). Évalué à 2.

    En fait je me suis mal exprimé : J'ai pris ls comme examples parce que c'est ce que j'avais de plus rapide sous la main pour faire un exemple. Mais si je fait un grep ou un cat, enfin bref n'importe qu'elle cmd qui me retourne des truc potentiellement avec des espace, j'ai ce probleme. exmaple :

    #!/bin/bash
    
    for fich in `grep titi $1`
    do
     echo "--$fich--"
    done
    En fait je souhaite que "for variable in commande" me gere le retrour de commande par ligne et non par mot.

    --
    Un petit coup de main, votez pour moi
    • [^]Re: s/\$\(ls\)/\*/

      Posté par Calim' Héros (Jabber id, page perso, ) le 23/03/2005 à 09:22. (lien). Évalué à 3.

      Et voila, en reecrivant ma demande je me suis vagement rapeller mes cours de shell (ksh a l'epoque) ou il y avait une variable pour gerer ca. Et hop, petit coups de man, recherche de la version qui va bien et hop une soluce :

      IFS="
      "
      a mettre en debut de script. N'oublié pas de la backupé si vous vouler recuperer le fonctionnement par default de bash. Noter aussi qu'il n'y a qu'un retrour chariot entre les deux ". Je n'ai malheuresement pas reussi a lui mettre un \n ou qque chose de plus "jolie" merci encore de votre aide :)

      --
      Un petit coup de main, votez pour moi

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.autre