[gull] bash>for>word
Félix Hauri
felix at f-hauri.ch
Thu Sep 30 22:57:01 CEST 2004
On Thu, Sep 30, 2004 at 03:42:36PM +0200, Daniel Cordey wrote:
> Jouer avec le IFS peutr s'averer enquiquinant suivant ce que tu veux faire
> dans la boucle.
Tu peux aussi utiliser une variable temporaire pour sauver IFS:
OIFS="$IFS";IFS=...; ...;IFS="$OIFS";
Mais de toutes façons, IFS en bash, par défaut c'est:
IFS=$' \t\n'
Soit Espace, Tabulation et Saut-de-Ligne. pas (plus;) très difficile...
> J'utilise systematiquement le 'while' lorsque j'ai une chance
> d'avoir N (N>1) arguments par ligne. De plus, le while me permet d'assigner
> chaque argument a un symbole pour chaque ligne et d'avoir, par exemple, toute
> la fin de la ligne dans le dernier symbole. Par exemple :
>
> echo 'toto titi tata
> a b c d' |\
> while read x y z
> do
> echo "[${x}] [${y}] [${z}]"
> done
>
> Donne :
>
> [toto] [titi] [tata]
> [a] [b] [c d]
Alors pour cela, je recommande le ``set --'' et le ``shift'':
$ ( IFS=":";
set -- $(grep $USER /etc/passwd);
shift;
shift;
muid=$1;shift;
mgid=$1;shift;
line=$*;
printf "uid=%s\ngid=%s\nconfig=%s\n" "$muid" "$mgid" "$line"
)
uid=12345
gid=10987
config=Félix Hauri,,,:/divan/userland/felix:/bin/bash
Nota: line=$* et non pas line=$@ pour m'assurer que j'aurrais bien des ``:''
comme séparateurs dans le reste de la ligne:
--
Félix Hauri - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list