[gull] bash>for>word
Félix Hauri
felix at f-hauri.ch
Thu Sep 30 22:39:01 CEST 2004
On Thu, Sep 30, 2004 at 03:25:20PM +0200, Sebastien Cevey wrote:
> begin Daniel Cordey quotation of Thu, Sep 30, 2004 at 08:41:55AM +0200:
> > Est-ce cela dont tu veux parler ?
>
> Non, car :
>
> seb at fawkes foo $ ls -1
> foobar
> hello world
> seb at fawkes foo $ for file in $(ls *); do echo $file; done
> foobar
> hello
> world
> seb at fawkes foo $
On en a parlé. ici, il n'y a pas longtemps :->>
( Le thread au sujet de ``Problèmes char'' )
dumbword]$ /bin/ls -1
foobar
hello word
dumbword]$ for file in *;do echo $file;done
foobar
hello word
fonctionne très bien, mais
dumbword]$ for file in *;do echo "$file";done
foobar
hello word
avec les guillemets, c'est mieux;)
Note que tu peux aussi:
# for file in /home/*/.bash_history;do grep -q "su" $file...
Les abréviations sont très souples essayez de trucs comme:
$ echo */*/*
ou encore
$ echo */[a-n]*/*
> Ta solution avec le pipe->while permet de contourner le problème de la
> séparation par newline vs. espaces,
Le problème est que ``|while'' génère un fork, cela peut poser un problème
de récupération de variable par le père, ou simplement de ressources.
> tandis qu'un simple for va séparer les champs par des espaces.
Pas du tout, si tu utilise le shell pour trouver les fichiers.
> On peut modifier IFS, mais je cherchais une astuce similiaire au while qui
> permet de ne pas toucher IFS...
Tu peux aussi modifier IFS localement:
dumbword]$ set | grep IFS
IFS=$' \t\n'
dumbword]$ ( IFS=$'\n';for file in $(/bin/ls -1) ;do echo $file;done )
foobar
hello word
dumbword]$ set | grep IFS
IFS=$' \t\n'
--
Félix Hauri - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list