Helge Reimer <hrnews@onlinehome.de> (Mo 01 Okt 2018 18:32:27 CEST): > Hallo , > > vielleicht ein unglücklicher Thread Titel aber ich möchte mir zum ersten mal > ein kleines bash script bauen und hab hier ein unerwartetes Ergebnis, wenn ich > die Ausgabe von 'grep' in eine Variable packe und mir die dann anzeigen lasse. > Hier mal ein paar Schnipsel: > > helge@debian:~$ cd /sys/devices/ > helge@debian:/sys/devices$ altmodes=`find -name alternate_modes` altmodes enhält eventuell jetzt mehrere Zeilen. Sollte im weiteren Verlauf ggf. bedacht werden. > helge@debian:/sys/devices$ echo $altmodes > ./pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/0003:046D:C24F.0007/alternate_modes > helge@debian:/sys/devices$ cat $altmodes | grep "*" > native: G29 Racing Wheel * > G29: G29 Racing Wheel * Die Verwendung von "*" ist nicht ok, das ist kein zulässiger Regulärer Ausdruck, unglücklicherweise toleriert Grep das aber und „denkt“, daß Du tatsächlich einen * suchst. (Es zeigt anderes Verhalten bei -E bzw. noch mal anderes bei -P, vielleicht ist da sogar dokumentiert irgendwo, daß ein Quantifier am Anfang eines Audrucks kein Quantifier mehr ist, wenn man POSIX RE verwendet - ja, ist in regex(7), kurz vor der BUGS section: ning of a parenthesized subexpression, '$' is an ordinary character except at the end of the RE or(!) the end of a parenthesized subexpression, and '*' is an ordinary character if it appears at the beginning of the RE or the beginning of a parenthesized subexpression (after a possible leading '^'). > Der Pfad zu 'alternate_modes' wurde gefunden und nach den Zeilen mit '*' > greppen klappt auch. Ausgabe korrekt. Ja, soweit so gut. > Wenn ich diese Ausgabe aber in eine Variable packe, dann passiert folgendes: > > helge@debian:/sys/devices$ actmode=$(cat $altmodes | grep "*") > helge@debian:/sys/devices$ echo $actmode > native: G29 Racing Wheel breakpoint cpu cstate_core cstate_pkg i915 kprobe ... > Versteh ich gerade nicht. > Kann mir jemand auf die Sprünge helfen? Du möchstest echo "$actmode" machen. Dein actmode enthält einen *, wenn Du mal nachliest über die Reihenfolge der Aktionen beim Parsen der Kommandozeile, wirst Du feststellen, daß als eine der ersten Aktionen die Variablen expandiert werden. Best regards from Dresden/Germany Viele Grüße aus Dresden Heiko Schlittermann -- SCHLITTERMANN.de ---------------------------- internet & unix support - Heiko Schlittermann, Dipl.-Ing. (TU) - {fon,fax}: +49.351.802998{1,3} - gnupg encrypted messages are welcome --------------- key ID: F69376CE - ! key id 7CBF764A and 972EAC9F are revoked since 2015-01 ------------ -
Attachment:
signature.asc
Description: PGP signature