Hallo, Am Wed, 15 Feb 2006, Achim Schaefer schrieb:
On Tuesday 14 February 2006 18:13, David Haller wrote:
for newuser in `cat $FILE`
Schlecht.
Warum?
Weil das Ergebnis oft nicht das ist was man erwartet...
while read -r newuser; do ... done < "$FILE"
So geht es auch, aber warum ist das besser?
$ wc ~/.procmail/procmail.log 8724 47138 427911 /home/dh/.procmail/procmail.log $ time { i=0; for x in `cat ~/.procmail/procmail.log`; do i=$[i+1]; done; echo "$i tokens"; } 47978 tokens real 0m9.745s $ time { i=0; while read x; do i=$[i+1]; done < ~/.procmail/procmail.log; echo "$i tokens"; } 8724 tokens real 0m1.736s Das read liest Zeilenweise, ggfs. auch mehrere Variablen auf einmal: OIFS="$IFS"; IFS=":";\ while read user pw uid gid comment home shell; do\ echo "user=$user, home=$home, shell=$shell";\ done < /etc/passwd;\ IFS="$OIFS" wobei ein "Rest" in der zuletzt angegebenen Variablen landet: OIFS="$IFS"; IFS=":";\ while read user rest; do\ echo "user=$user, Rest=$rest";\ done < /etc/passwd;\ IFS="$OIFS" Aber man sollte sowieso 'getent passwd | ' verwenden und nicht /etc/passwd auslesen. HTH, -dnh -- No, no, no - you are out of sync. This week the topic is "Germany is antisemitic", "Germany is controlled by a Jewish conspiracy" is *next* week. Please stick to the official schedule, otherwise you'll get us all confused. Thank you. -- Stefan Doll in dpg/scg