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 2005Alors 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?
> Lire le message (6 commentaires, moyenne: 2,5).
s/\$\(ls\)/\*/
#!/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.-
[^]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 :)-
[^]Re: s/\$\(ls\)/\*/
Posté par Damien POBEL (page perso, ) le 23/03/2005 à 09:41. (lien). Évalué à 2.peut être
IFS=`echo ""`
qui évite d'avoir un retour à la ligne bizarre.-
[^]Re: s/\$\(ls\)/\*/
Posté par Calim' Héros (Jabber id, page perso, ) le 23/03/2005 à 10:00. (lien). Évalué à 3.Ca y est je la tient :
IFS=$'\n'
-
-
-
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.autre


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.