Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.os.unix.shell > #14548
| From | Stefan Reuther <stefan.news@arcor.de> |
|---|---|
| Newsgroups | de.comp.os.unix.shell |
| Subject | Re: richtig quoten |
| Date | 2025-07-17 18:27 +0200 |
| Message-ID | <105bfab.29g.1@stefan.msgid.phost.de> (permalink) |
| References | <078ee6a7-4eb6-4927-a40f-49bb333298b3@alexander-goetzenstein.my-fqdn.de> <1058pld.3mk.1@stefan.msgid.phost.de> <83jz47sso6.fsf@helmutwaitzmann.news.arcor.de> |
Am 16.07.2025 um 23:59 schrieb Helmut Waitzmann:
> Stefan Reuther <stefan.news@arcor.de>:
>> Du musst dafür sorgen, dass die Variable BEFEHL genau den Befehl mit
>> allen gewünschten Sonderzeichen enthält. Das geht am einfachsten,
>> indem du vor alle Sonderzeichen einen Backslash packst:
>>
>> BEFEHL="kdialog --msgbox \"Beginn: \$DATUM \\nEnde:
>> \$FERTIG\\n\$LAUFZEIT\" &"
>
> Wenn in dem Befehl ein Newline‐Zeichen vorkommt, scheitert das, weil
> Newline‐Zeichen mit einem Backslash nicht geschützt werden können.
Die Newlines muss man hier nicht gesondert behandeln, sondern einfach
stehenlassen:
BEFEHL="echo \"foo
bar\""
eval "$BEFEHL"
>> Im konkreten Fall reicht auch, einfach ein Hochkomma davor und eins
>> dahinter
>>
>> BEFEHL='kdialog --msgbox "Beginn: $DATUM \nEnde:
>> $FERTIG\n$LAUFZEIT" &'
>>
>> aber das wird dann unhandlich, wenn der Befehl Hochkommate enthält.
>
> Dann ersetzt man einfach zuvor alle im Befehl stehenden Hochkommata (mit
> einem Suchen‐und‐Ersetzen‐Kommando des Texteditors) durch die
> Zeichenfolge „'\''“ (ein Hochkomma, einen umgekehrten Schrägstrich und
> zwei Hochkommata).
Das ist das, was ich mit unhandlich meine.
>> Dennoch wäre meine Empfehlung, eine Shellfunktion zu verwenden.
>>
>> status() {
>> kdialog --msgbox "Beginn: $DATUM \nEnde: $FERTIG
>> \n$LAUFZEIT" &
>> }
>> BEFEHL=status
>>
>> Dann kannst du zum Aufrufen auch auf das 'eval' verzichten, sondern
>> einfach $BEFEHL aufrufen.
>
> Nicht
>
> $BEFEHL
>
> sondern
>
> "$BEFEHL".
Das kommt halt drauf an, was man will.
"$BEFEHL" -- die Variable enthält ein Wort, das als Befehlsname
interpretiert werden soll, z.B. einen Dateinamen, der Leerzeichen
enthalten kann.
$BEFEHL -- die Variable enthält ein Kommando mit Optionen. Das ist
angemessen für Dinge wie "CC=gcc -m32 -sysroot=/whatever", aber
Parameter mit Leerzeichen drin sind nicht möglich.
eval "$BEFEHL" -- die Variable enthält ein Kommando, das
Shell-Sonderzeichen beinhalten kann, von Quoting über weitere Variablen
bis zu '&' und Umleitungen.
Und außer Konkurrenz: '$BEFEHL' -- jemand war der Meinung, dass der Name
des Binaries mit einem Dollarzeichen beginnen solle.
Shell ist nicht so eine unvorhersehbare Naturkatastrophe, wie sie
manchmal dargestellt wird, aber man muss eben immer gut bei der Sache
sein und sich zu jedem Zeitpunkt klar sein, was für Werte man wie in
seine Variablen packt, und wenn man zu viel auf einmal will, wird es
unübersichtlich.
Wenn eine Variable aber z.B. entweder den Wert 'true' oder den Wert
'false' beinhalten kann, kann man Dinge wie 'if $var; then' ganz elegant
aufschreiben, ohne den Code mit Quoting zu verunstalten.
Stefan
Back to de.comp.os.unix.shell | Previous | Next — Previous in thread | Next in thread | Find similar
richtig quoten Alexander Goetzenstein <alexander_goetzenstein@web.de> - 2025-07-16 15:14 +0200
Re: richtig quoten Ulli Horlacher <framstag@rus.uni-stuttgart.de> - 2025-07-16 13:22 +0000
Re: richtig quoten Ulli Horlacher <framstag@rus.uni-stuttgart.de> - 2025-07-16 16:19 +0000
Re: richtig quoten "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2025-07-16 16:06 +0200
Re: richtig quoten ram@zedat.fu-berlin.de (Stefan Ram) - 2025-07-16 14:46 +0000
Re: richtig quoten "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2025-07-16 17:30 +0200
Re: richtig quoten ram@zedat.fu-berlin.de (Stefan Ram) - 2025-07-16 15:48 +0000
Re: richtig quoten Stefan Reuther <stefan.news@arcor.de> - 2025-07-16 18:05 +0200
Re: richtig quoten Alexander Goetzenstein <alexander_goetzenstein@web.de> - 2025-07-16 21:17 +0200
Re: richtig quoten Helmut Waitzmann <nn.throttle@xoxy.net> - 2025-07-16 23:59 +0200
Re: richtig quoten Stefan Reuther <stefan.news@arcor.de> - 2025-07-17 18:27 +0200
Re: richtig quoten Helmut Waitzmann <nn.throttle@xoxy.net> - 2025-07-17 22:20 +0200
Re: richtig quoten Helmut Waitzmann <nn.throttle@xoxy.net> - 2025-07-16 23:38 +0200
csiph-web