Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.os.unix.shell > #14548

Re: richtig quoten

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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