[gull] bash>for>word
Félix Hauri
felix at f-hauri.ch
Fri Oct 1 11:42:01 CEST 2004
On Fri, Oct 01, 2004 at 08:48:12AM +0200, Daniel Cordey wrote:
> On Thursday 30 September 2004 22:55, Félix Hauri wrote:
>
> > Alors pour cela, je recommande le ``set --'' et le ``shift'':
>
> Ca depend pourquoi tu le recommandes. Pour la lisibilite du code, ...
Plus pour la souplesse, en fait... mait tout se discute!
(Sinon ce ne serait pas une liste de discussions ;-)
> j'en reste a 'while' qui me permet d'ecrire :
>
> x=${IFS}; IFS=':'
> grep ${USER} /etc/passwd |\
> while read name psswd uid gid dummy desc home shell
> do
> echo "Your login name is : ${name}\nYour shell is : ${shell}"
> done
> IFS=${x}
Ok, mais là tu génère un fork en dehors duquel tes variables n'existent plus!
(Ou ne sont pas mises à jour)
De plus la boucle ``while ...;do ... ;done'' pour 1 itération peut être évitée
avec des parenthèses, mais de toutes façons: fork. :-/
$ name="dumy init"
x=${IFS}
IFS=$'\t:'
grep ${USER} /etc/passwd | (
read name dummy uid gid line
echo -e "Your login name is : ${name}\nYour config line is : ${line}"
)
Your login name is : felix
Your config line is : Félix Hauri,,,:/divan/userland/felix:/bin/bash
$ echo "name after fork is:'${name}'"
name after fork is:'dumy init'
$ IFS=${x}
> Je pense a ceux qui debutent sous Linux et dans le shell.
Cela aussi peut dérouter des débutants:
Ou est passé ma variable! :-<
(Au passage, regarder IFS=$'\t:' et pas seulement IFS=':',
c'est pour une conversion automatique, ci dessous... )
Alors que:
$ x=${IFS}
mgid="dumy init"
IFS=$'\t:'
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"
IFS=${x}
uid=12345
gid=10987
config=Félix Hauri,,, /divan/userland/felix /bin/bash
Il n'y a pas de fork, mes variables sont bien là.
(De plus, les ``:'' ont été convertis en tabulations au passage ;)
$ echo "Variame name: '$name' et mgid: '$mgid'"
Variame name: 'dumy init' et mgid: '10987'
> Comme ca au matin, shift, set, ... ca doit les surprendre :-)
Désolé ;)
Bonne journée!
$ man bash | wc
(Ou bonne nuit à ceux qui décideront après cette dernière
commande de retourner dormir un coup;)
--
Félix Hauri - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list