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

Posté par  (site web personnel) .
Étiquettes : aucune
0
23
mar.
2005
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?
  • # s/\$\(ls\)/\*/

    Posté par  (site web personnel) . Évalué à 3.


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

    Chez moi marche avec les fichiers avec espace
    • [^] # Re: s/\$\(ls\)/\*/

      Posté par  . É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  (site web personnel) . É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.
      • [^] # Re: s/\$\(ls\)/\*/

        Posté par  (site web personnel) . É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 :)

Suivre le flux des commentaires

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