On 18 Sep 2002 at 20:59, David Haller wrote: [...]
$ touch oberboerks $ foo="bla : bla fasel;: *boerks*" $ bar="`echo $foo | cut -d':' -f3`" $ echo "'$bar'" ' oberboerks'
Wirkt etwas konstruiert, der Plot ;-) Aber klar: Shell-Sonderzeichen hatte ich erfolgreich verdrängt, sowas muss gequoted werden.
$ bar=`echo "$foo" | cut -d':' -f3` $ echo "'$bar'" ' *boerks*'
Merkst du was? Und ja, die bash interpretiert das `` als ein "Token", das quoten ist ueberfluessig, die Leerzeichen ueberlebens sowieso, aber andere Metazeichen nur, wenn das echo-Argument gequoted wird.
*Verwirrt den Kopf kratz* Nanu - das hatte ich doch anders in Erinnerung. Werde ich etwa senil? jan@p4mobil:~/devel/tests> touch "x y" jan@p4mobil:~/devel/tests> a="x y" jan@p4mobil:~/devel/tests> ls `echo "$a"` ls: x: Datei oder Verzeichnis nicht gefunden ls: y: Datei oder Verzeichnis nicht gefunden jan@p4mobil:~/devel/tests> ls "`echo $a`" x y Ah, _sowas_ meinte ich :-) Merkwürdig - die Zuweisung an Variablen scheint nach anderen Gesetzen zu laufen. Kann es sein, dass bash-Interna da andere Wege gehen als der normalsterbliche Linux-Befehl? Das werde ich morgen mal unter Solaris testen.
Oh, IFS ist sehr praktisch und ein sehr probates Mittel. Bsp:
$ OIFS="$IFS"; IFS=":"; set -- `grep '^dh' /etc/passwd`; echo "$7"; IFS="$OIFS" /bin/bash
Hmm: grep '^dh' /etc/passwd | cut -f7 -d: oder: awk -F : ' /^dh/ { print $7 } ' /etc/passwd sind mir persönlich lieber, aber wie gesagt: IMHO-Modus. Ich kann im ersten Moment auch nicht erkennen, welche Vorteile mir die IFS-Version bringt.
Auch nett:
$ OIFS="$IFS"; IFS=":"; set -- `grep '^dh' /etc/passwd`; for i; do echo "'$i'"; done"; IFS="$OIFS" ^^ typo!
grep '^jan' /etc/passwd | tr ':' '\n' Ich habe das Umbauen von IFS auch schon verwendet, konnte mich aber nie so richtig damit anfreunden und nehme wenn möglich was anderes. In Scripts sehe ich den Einsatz von set -- eh kritisch, weil ich mir damit u. U. die Original- Parameter überschreibe.
BTW: Geht denn das, Positionsparameter $10 usw.?
Na klar geht das, man muss aber ${nn} verwenden, da die bash sonst aus $13 ein ${1}3 macht.
Gucke da, ich habe bisher (hatte ich mal so gelernt) immer brav shift gemacht. Noch ein Fall für meinen Solaris-Test ;-) Jan