Hallo Andreas, hallo Leute, bevor die Mail noch länger hier rumliegt, schreib ich lieber eine knappe Antwort. Am Freitag, 21. Januar 2005 23:17 schrieb Andreas Rau: [...]
BASEDIR="`echo \"$PXPATH\" | sed 's/\([()]\)/\\\\\1/g'`"
Das isses !!! David Du bist halt immer wieder ein Held ;-)
Und wie sed das dann auch noch auswertet... ;)
Tsja das interessiert mich jetzt schon. Mir ist klar, dass mittels regexp die Klammern selektiert werden und dann mittels "\1" wieder im Ersetzungsteil von sed wieder dereferenziert werden. Aber warum benötige ich vier Backslashes "\\\\" damit in BASEDIR gerade mal einer angezeigt wird?
Weil an diversen Stellen escapt werden muss. Die Bash braucht erstmal Escaping, vom sed 's/\([()]\)/\\\\\1/g' [1] kommt bei sed s/\([()]\)/\\\1/g an. So, und weil der Backslash in sed auch eine Sonderbedeutung hat, ist auch sed-seitig Escaping nötig. Damit halbiert sich die Anzahl der Backslashes nochmal ;-) und Du hast Deinen einzelnen Backslash. Gruß Christian Boltz [1] was mir gerade aufgefallen ist: das "\1" (sowie "\(" und "\)" hätte strenggenommen auch escapt werden müssen -> "\\1" (usw.), also noch ein Backslash mehr. -- Um es auf dein Beispiel zu übertragen: [...] - oder - Wir stehen sowieso mit runtergelassener Unterhose mitten auf der Autobahn 7 und es ist relativ egal, ob wir jetzt noch eine Gummi-Hupe und eine Taschenlampe in der Hand halten, während ein Tanklaster auf uns zuhält. [Ratti in fontlinge-devel]