Hallo Freunde, Nerv euch schon wieder aus dem Studium der Shell Vielleicht liegt es daran, das ich eine andere Shell als Galileo habe? 3.7 Grundlagen der Shellnutzung http://openbook.galileocomputing.de/linux/linux_03_shell_007.htm#mj0f517cc26... 3.7.7 echo $ echo "Hallo, Welt\\!" Hallo, Welt! Listing 3.28 Das Kommando echo Wie Ihnen vielleicht aufgefallen ist, gibt es hierbei doch etwas zu beachten: Einige Sonderzeichen, wie im obigen Beispiel das Ausrufezeichen, müssen durch Escape-Sequenzen eingeleitet werden, da diese Zeichen ansonst andere Aktionen einleiten. Später werden Sie einige solcher Sonderzeichen kennenlernen, etwa das Dollarzeichen ($), das für Variablen Verwendung findet. ~> echo "Hallo, Welt\\!" Hallo, Welt\! von den 2 \\ bleibt bei mir eins immer stehen Welt\\!" oder Welt\!" = Welt\! 3.7.8 Shellvariablen ~> KATZE=Felix Listing 3.30 Der Variable »KATZE« den Wert »Felix« zuweisen ~> echo $KATZE Felix Listing 3.31 echo mit Variable Variablen in Text einbetten und ausgeben $ echo "Herzlich willkommen, $KATZE\\!" Herzlich willkommen, Felix! Listing 3.34 Variable im Text ~> echo "Herzlich willkommen, $KATZE\\!" Herzlich willkommen, Felix\! ~> echo "Herzlich willkommen, $KATZE!" bash: !": event not found ----------- In O'REILYS Taschenbibliothek Linux - kurz&gut Der Befehl echo $ echo Mein Mame ist $USER Mein Name ist schmidt (Weitere Hilfsquellen | 17) In Shell-Skripte programmieren habe ich die Angabe: $ echo "Hallo Welt" (Shell-Skripte programmieren | 183) Hier habe ich die Angabe hinter echo in Ausführungszeichen. Sind die in der Shell-Skrpt-Progarmmierung notwendig? ~> echo Herzlich willkommen, $KATZE! Herzlich willkommen, Felix! Ohne Ausführungszeichen habe ich keine Probleme. ----------- Danke; und schönes Wochenende Stefan -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Stefan! On So, 14 Feb 2010, Stefan Plenert wrote:
~> echo "Herzlich willkommen, $KATZE!" bash: !": event not found
! startet normalerweise History Expansion. Deswegen muß das normalerweise gequotet werden. set +H kann das ausschalten.
$ echo "Hallo Welt"
(Shell-Skripte programmieren | 183)
Hier habe ich die Angabe hinter echo in Ausführungszeichen.
Sind die in der Shell-Skrpt-Progarmmierung notwendig?
~> echo Herzlich willkommen, $KATZE! Herzlich willkommen, Felix!
Ohne Ausführungszeichen habe ich keine Probleme.
Du solltest unbedingt quoten. Immer. Hilft später blöde Probleme zu vermeiden. Es schadet eigentlich nie zu quoten, auch wenn es nicht immer notwendig ist, aber es hilft, viele Probleme zu vermeiden. Mit freundlichen Grüßen Christian -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag, 14. Februar 2010 schrieb Stefan Plenert:
3.7.7 echo
$ echo "Hallo, Welt\\!" Hallo, Welt!
Das ist falsch
~> echo "Hallo, Welt\\!" Hallo, Welt\!
Das ist korrekt. Ein Backtick escaped Sonderzeichen wie das Ausrufezeichen. Bei zweien escaped der erste den zweiten. Daraus folgt: echo "Hallo, Welt!" gibt nen fehler, weil das Ausrufezeichen eine spezielle Bedeutung hat echo "Hallo, Welt\!" escaped das Ausrufezeichen korrekt, die Ausgabe sollte "Hallo, Welt!" sein. echo "Hallo, Welt\\!" der erste Backtick bleibt stehen (wird angezeigt), der zweite escaped das Ausrufezeichen. IMHO Inkonsequentes Design, eigentlich sollte der erste Backtick den zweiten escapen und das Ausrufezeichen einen Fehler produzieren, aber da haben die Entwickler wohl anders gedacht.
(Shell-Skripte programmieren | 183)
Hier habe ich die Angabe hinter echo in Ausführungszeichen.
Sind die in der Shell-Skrpt-Progarmmierung notwendig?
Wenn Du keine Anführungszeichen verwendest, wird jedes durch Leerzeichen getrennte Word als einzelner Parameter übergeben. Mit Anführungszeichen sind alle zusammen ein Argument. Bei echo mag das noch das selbe Resultat erzeugen, bei anderen Shell Befehlen erlebst Du damit schnell böse Überraschungen (beliebtes Beispiel sind Pfad- und Dateiangaben mit Leerzeichen).
~> echo Herzlich willkommen, $KATZE! Herzlich willkommen, Felix!
Korrekt wäre wohl echo "Herzlich willkommen, $KATZE\!" -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Sonntag, 14. Februar 2010 14:02:44 Manfred Tremmel wrote:
Am Sonntag, 14. Februar 2010 schrieb Stefan Plenert:
3.7.7 echo
$ echo "Hallo, Welt\\!" Hallo, Welt!
Das ist falsch
~> echo "Hallo, Welt\\!" Hallo, Welt\!
Das ist korrekt.
Ein Backtick escaped Sonderzeichen wie das Ausrufezeichen. Bei zweien escaped der erste den zweiten. Daraus folgt:
echo "Hallo, Welt!"
gibt nen fehler, weil das Ausrufezeichen eine spezielle Bedeutung hat
echo "Hallo, Welt\!"
escaped das Ausrufezeichen korrekt, die Ausgabe sollte "Hallo, Welt!" sein.
echo "Hallo, Welt\\!"
der erste Backtick bleibt stehen (wird angezeigt), der zweite escaped das Ausrufezeichen. IMHO Inkonsequentes Design, eigentlich sollte der erste Backtick den zweiten escapen und das Ausrufezeichen einen Fehler produzieren, aber da haben die Entwickler wohl anders gedacht.
(Shell-Skripte programmieren | 183)
Hier habe ich die Angabe hinter echo in Ausführungszeichen.
Sind die in der Shell-Skrpt-Progarmmierung notwendig?
Wenn Du keine Anführungszeichen verwendest, wird jedes durch Leerzeichen getrennte Word als einzelner Parameter übergeben. Mit Anführungszeichen sind alle zusammen ein Argument. Bei echo mag das noch das selbe Resultat erzeugen, bei anderen Shell Befehlen erlebst Du damit schnell böse Überraschungen (beliebtes Beispiel sind Pfad- und Dateiangaben mit Leerzeichen).
~> echo Herzlich willkommen, $KATZE! Herzlich willkommen, Felix!
Korrekt wäre wohl
echo "Herzlich willkommen, $KATZE\!"
Danke, schönes Wochenende Stefan -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On 14/02/2010 13:02, Manfred Tremmel wrote:
Am Sonntag, 14. Februar 2010 schrieb Stefan Plenert: [...]
~> echo "Hallo, Welt\\!" Hallo, Welt\!
Das ist korrekt.
Ein Backtick escaped Sonderzeichen wie das Ausrufezeichen. Bei zweien escaped der erste den zweiten.
Das ist kein Backtick "`" (im Deutschen: rueckwaerts geneigtes Hochkomma), sondern ein Backslash "\" (im Deutschen: umgekehrter Schraegstrich). Cheers, Thomas -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Son, 14 Feb 2010, Manfred Tremmel schrieb:
~> echo "Hallo, Welt\\!" Hallo, Welt\!
Das ist korrekt.
Ein Backtick escaped Sonderzeichen wie das Ausrufezeichen. Bei zweien escaped der erste den zweiten. Daraus folgt:
s/backtick/backslash/gi -dnh -- Matthias (nach Diktat vereist[1]) [1] Straciatella -- Matthias Esken in <darw/> -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag, 14. Februar 2010 schrieb David Haller:
Hallo,
Am Son, 14 Feb 2010, Manfred Tremmel schrieb:
~> echo "Hallo, Welt\\!" Hallo, Welt\!
Das ist korrekt.
Ein Backtick escaped Sonderzeichen wie das Ausrufezeichen. Bei zweien escaped der erste den zweiten. Daraus folgt:
s/backtick/backslash/gi
Ist natürlich richtig, muss backslash heißen. Danke an Thomas und Dich für die Richtigstellung. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Manfred Tremmel
Am Sonntag, 14. Februar 2010 schrieb Stefan Plenert:
3.7.7 echo
$ echo "Hallo, Welt\\!" Hallo, Welt!
Das ist falsch
~> echo "Hallo, Welt\\!" Hallo, Welt\!
Das ist korrekt.
Ein Backtick escaped Sonderzeichen wie das Ausrufezeichen. Bei zweien escaped der erste den zweiten. Daraus folgt:
echo "Hallo, Welt!"
gibt nen fehler, weil das Ausrufezeichen eine spezielle Bedeutung hat
echo "Hallo, Welt\!"
escaped das Ausrufezeichen korrekt, die Ausgabe sollte "Hallo, Welt!" sein. [...]
macht Bash aber trotzdem nicht. :~> echo "Hallo, Welt\!" Hallo, Welt\! aber so wird ein Schuh daraus: :~> echo "Hallo, Welt"\!"" Hallo, Welt! :~> bash --version GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc. -Dieter -- Dieter Klünter | Systemberatung http://dkluenter.de GPG Key ID:8EF7B6C6 53°37'09,95"N 10°08'02,42"E -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Son, 14 Feb 2010, Dieter Kluenter schrieb:
macht Bash aber trotzdem nicht. :~> echo "Hallo, Welt\!" Hallo, Welt\!
aber so wird ein Schuh daraus: :~> echo "Hallo, Welt"\!"" Hallo, Welt!
:~> bash --version GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc.
Hier auch. Sollte aber eigentlich[tm] nen Bug sein, denn $ echo "Hallo, Welt\\" Hallo, Welt\ $ echo "Hallo, Welt\"" Hallo, Welt" $ echo "Hallo, Welt\\\\" Hallo, Welt\\ $ echo "Hallo, Welt\\\"
[hier Strg+c wg. dem noch offenen " am Zeilenanfang] $ echo "Hallo, Welt\\"" [hier Strg+c wg. dem noch offenen " am Zeilenende]
verhält sich wie erwartet. $ bash --version GNU bash, version 2.03.0(1)-release (i386-suse-linux) Copyright 1998 Free Software Foundation, Inc. Und deswegen steht in meiner ~/.bashrc auch set +H das schmeißt einem wenigsten nicht irgendwas unerwartetes aus der History in die Zeile. Gegen das komische Verhalten hilft's aber nicht: $ echo "Hallo, Welt!" Hallo, Welt! $ echo "Hallo, Welt\!" Hallo, Welt\! $ echo "Hallo, Welt\\!" Hallo, Welt\! $ echo "Hallo, Welt\\\!" Hallo, Welt\\! Achso: in '' verhält es sich wie erwartet: $ echo 'Hallo, Welt\' Hallo, Welt\ $ echo 'Hallo, Welt\\' Hallo, Welt\\ $ echo 'Hallo, Welt\\\' Hallo, Welt\\\ $ echo 'Hallo, Welt!' Hallo, Welt! $ echo 'Hallo, Welt\!' Hallo, Welt\! $ echo 'Hallo, Welt\\!' Hallo, Welt\\! Und deswegen predige ich auch immer, so "aggressiv" zu quoten wie es geht (d.h. möglichst alles mit '', nur bei Bedarf mit "", und nur wenn's gar nicht anders geht gar nicht zu quoten. Und zwar immer nur die Teile, die man nicht mit '' (bzw. "") quoten kann. Das sieht dann zwar häßlich aus, funktioniert aber. Zum Beispiel: $ Katze="Felix"; echo 'Hallo '"$Katze"'!' Hallo Felix! -dnh -- Disclaimer - These opiini^H^H damn! ^H^H ^Q ^[ .. :w :q :wq :wq! ^d X^? exit X Q ^C ^c ^? :quitbye CtrlAltDel ~~q :~q logout save/quit :!QUIT ^[zz ^[ZZZZZZ ^H man vi ^@ ^L ^[c ^# ^E ^X ^I ^T ? help helpquit ^D ^d man help ^C exit ?Quit ?q CtrlShftDel "Hey, what does this button d..." -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Sonntag, 14. Februar 2010 15:43:04 Dieter Kluenter wrote:
Manfred Tremmel
writes: Am Sonntag, 14. Februar 2010 schrieb Stefan Plenert:
3.7.7 echo
[...]
macht Bash aber trotzdem nicht.
:~> echo "Hallo, Welt\!"
Hallo, Welt\!
aber so wird ein Schuh daraus: :~> echo "Hallo, Welt"\!""
Hallo, Welt!
:~> bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc.
-Dieter
Jetzt kommts hin. stefan@linux-1c4m:~> read name Felix stefan@linux-1c4m:~> echo "Hallo, $name"\!"" Hallo, Felix! stefan@linux-1c4m:~> bash --version GNU bash, version 3.2.39(1)-release (i586-suse-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc. Bei echo "Hallo, Welt!" gibt es keine Probleme, erst bei $name + !. Schöner Sonntag noch. Stefan -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (6)
-
Christian Brabandt
-
David Haller
-
Dieter Kluenter
-
Manfred Tremmel
-
Stefan Plenert
-
Thomas Hertweck