David Haller wrote:
Bernd Brodesser wrote:
* Marc Schiffbauer schrieb am 23.Mai.2000:
VAR3=`echo XXabXX | sed s/$VAR1/$VAR2/`
VAR3=`echo XXabXX | sed 'sed s|$VAR1|$VAR2|'`
Das funzt bei mir nicht. $ ./test.sh sed: -e expression #1, char 18: Unterminated `s' command
Klar, da das zweite Vorkommen der Zeichenfolge sed ein Vertipper von Bernd war.
Das dann naheliegende: VAR3=`echo /home/marc/test.sh | sed 's|$VAR1|$VAR2|'` mach gar nichts, was aber klappt ist:
Falsch! Es macht schon was, nur es wird nichts ersetzt. Das Problem ist, das die Shell alles in einfachen Quotes (') gar nicht beachtet. Insbesondere findet keine Variablenersetzung statt. Hier versuchst du also den String '$VAR1' durch den String '$VAR2' zu ersetzen.
VAR3=`echo /home/marc/test.sh | sed "s|$VAR1|$VAR2|"` (Achso: bei mir ist VAR1=marc, VAR2=dh/bin ;)
Auch klar, weil bei doppelten Quotes (wie schreibt man eigentlich den Plural von Hochkomma?) die Shell eine Variablenersetzung durchführt. Andreas --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hallo Andreas, Andreas.Kyek@arcor.net wrote:
David Haller wrote:
Bernd Brodesser wrote:
VAR3=`echo XXabXX | sed 'sed s|$VAR1|$VAR2|'`
Das funzt bei mir nicht. $ ./test.sh sed: -e expression #1, char 18: Unterminated `s' command
Klar, da das zweite Vorkommen der Zeichenfolge sed ein Vertipper von Bernd war.
Klar. Aber da's von Bernd kam, hab ich's einfach doch mal getestet, nur um zu sehen ob da nicht doch.... ;)
Das dann naheliegende: VAR3=`echo /home/marc/test.sh | sed 's|$VAR1|$VAR2|'` mach gar nichts, was aber klappt ist:
Falsch! Es macht schon was, nur es wird nichts ersetzt.
Ebent. (Ich habe der Einfachheit halber "macht nix" mit "macht nix fuer die Problemloesung sinnvolles" gleichgesetzt ;)
Das Problem ist, das die Shell alles in einfachen Quotes (') gar nicht beachtet. Insbesondere findet keine Variablenersetzung statt. Hier versuchst du also den String '$VAR1' durch den String '$VAR2' zu ersetzen.
Ahh! (Schon wieder was gelernt).
VAR3=`echo /home/marc/test.sh | sed "s|$VAR1|$VAR2|"` (Achso: bei mir ist VAR1=marc, VAR2=dh/bin ;)
Auch klar, weil bei doppelten Quotes (wie schreibt man eigentlich den Plural von Hochkomma?)
Wie bei "Komma": Hochkommata
die Shell eine Variablenersetzung durchführt.
Ah jetzt ja... bilde ich mir ein was geblickt zu haben... CU David -- "DOS=HIGH ...I knew it was on something!" (UNIX user, while reading C:\CONFIG.SYS) email: David@dhaller.de www: www.dhaller.de --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Wed, May 24, 2000, David Haller wrote: Hallo!
Ebent. (Ich habe der Einfachheit halber "macht nix" mit "macht nix fuer die Problemloesung sinnvolles" gleichgesetzt ;)
Das Problem ist, das die Shell alles in einfachen Quotes (') gar nicht beachtet. Insbesondere findet keine Variablenersetzung statt. Hier versuchst du also den String '$VAR1' durch den String '$VAR2' zu ersetzen.
Ahh! (Schon wieder was gelernt).
Ich weiß nicht, wie es in bash ist, aber in csh/tcsh stimmt das nicht ganz. (Wo wir schon penibel sind. :-) Zitat aus "Using csh/tcsh" von O'Reilly: '...' Quote the characters between single quotes. !event is still evaluated as a history substitution. "..." Quote the characters between double quotes. !event, $var and `cmd` are still evaluated as a history, variable and command substitutions. Wer !event nicht haben will, muß ASAIK \! nehmen, wie in: echo 'Hmmpf. Kann ich nicht\!\!' Nur so für interessierte Leute. Macht nämlich auch nichts für die momentane Problemstellung. :-) Gunther -- --------------------------- Dipl.-Ing. Gunther Kuhlmann Gunther_Kuhlmann@mentorg.com Tel.: +44 (0)12 52 / 74 83 25 PGP: E6 BC 78 6B E6 09 C7 16 AB 5D 9A 9A D7 1C 01 FB --------------------------- --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* David Haller schrieb am 24.Mai.2000:
Andreas.Kyek@arcor.net wrote:
Das Problem ist, das die Shell alles in einfachen Quotes (') gar nicht beachtet.
Ist vielleicht nicht ganz geschickt ausgedrückt. Alles was in einfachen Quotes steht wird so genommen wie es da steht. '$VAR' zum Beispiel wird als Dollar V A R genommen, ohne Leerzeichen natürlich. Es wird nicht interpretiert. Einzige Ausnahme: Der Backslash \ und das einfache Hochkomma ' selber.
Insbesondere findet keine Variablenersetzung statt. Hier versuchst du also den String '$VAR1' durch den String '$VAR2' zu ersetzen.
Ja, daß ist richtig. Testweise kann man mal folgendes eingeben: $ VAR=Inhalt $ echo $VAR Inhalt $ echo "$VAR" Inhalt $ echo '$VAR' $VAR $ echo `$VAR` bash: Inhalt: command not found Die " schützen Leerzeichen, Returns und vor allem * und ?. Das macht auch \, allerdings nur für das nächste Zeichen. $ cd / $ echo * bin boot dev etc home lib lost+found mnt opt proc root sbin tmp usr var $ echo "*" * $ echo \* * $ echo '*' * $ echo `*` bash: /usr/games/bin: is a directory Alles was zwichen `` steht wird ausgeführt und damit ersetzt. Bernd -- Homepages von deutschsprachigen Linux-Gurus: Kristian Köhntopp: http://www.koehntopp.de/kris/artikel/ Sven Guckes: http://www.math.fu-berlin.de/~guckes/sven Robin S Socha: http://socha.net/index2.html |Zufallssignatur 10 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (4)
-
Andreas.Kyek@arcor.net
-
B.Brodesser@online-club.de
-
David@dhaller.de
-
gunther_kuhlmann@mentorg.com