Dregis STB C sagte:

[Was habe ich denn nun schon wieder angestellt?]

> http://www.mail-archive.com/[email protected]/msg05629.html
>
> Nun erkl�r mir doch mal, was das Ding genau macht. Ich habe es n�mlich
> gerade f�r einen Anwendungsfall adaptiert, wo ich nicht mit
> awk-Prozessen um mich schmei�en will, aber ich schnalle einfach nicht,
> was da um die Zeile "set -- $zeile" herum passiert.

Zwei Tricks zusammen:

a) "set --":
--  Prevents any flags from being changed. This option
is useful in setting the $1 parameter to a value
beginning with a - (minus sign). If no arguments
follow this flag, the positional parameters are not set.

D.h. ich ver�ndere keine Shell-Options (wie "noclobber"), sondern
setze die Positionsparameter $1, $2, $3 auf das, was in der
Variablen $zeile steht.  W�re also zeile="a b c", dann ist nach
"set -- $zeile" $1=a, $2=b und $3=c.  Wie man sieht, es wird
an den Leerzeichen getrennt.

b) Das mit den Leerzeichen ist ja prompt gelogen, denn eigentlich
ist das Trennzeichen in $IFS definiert.  In dem Skript tue ich
denn nun auch "IFS=':'", das ist ja der Feld-Trenner in der /etc/passwd.
Damit f�llt das erste Feld (Benutzername) in $1, das zweite in $2
und so fort.

Das ist nat�rlich alles viel zu umst�ndlich,

IFS=":"
while read user uid gid gecos home_ shell ; do
...
done < /etc/passwd

w�rde es auch tun.  Mit Ausnahme der folgenden Zeile:

>       echo "Length: ${#zeile}"

Das war der Grund f�r "set --".  Alle Klarheiten beseitigt?

Jochen

-- 
This space is intentionally left blank.


----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an