Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Stefan Reuther Newsgroups: de.comp.os.unix.shell Subject: Re: richtig quoten Date: Wed, 16 Jul 2025 18:05:32 +0200 Lines: 43 Message-ID: <1058pld.3mk.1@stefan.msgid.phost.de> References: <078ee6a7-4eb6-4927-a40f-49bb333298b3@alexander-goetzenstein.my-fqdn.de> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Trace: individual.net rzzNeE7BW5IgzIeQhmKXwAvXX2dI8d/YIpN1/AiNyjLf7txPI4 Cancel-Lock: sha1:2la10JD3G4yImJgk1XLFJmTNVcU= sha256:DmFhVgShyrF1uoCEnD4kUocBR4lUt+uT47iyQMdZfsk= User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1 Hamster/2.1.0.1538 In-Reply-To: <078ee6a7-4eb6-4927-a40f-49bb333298b3@alexander-goetzenstein.my-fqdn.de> Xref: csiph.com de.comp.os.unix.shell:14543 Am 16.07.2025 um 15:14 schrieb Alexander Goetzenstein: >> [...] >> ## Beispielwerte: >> DATUM=2025-07-16_14-10 >> FERTIG=2025-07-16_14-15 >> LAUFZEIT=5 Minuten >> [...] >> kdialog --msgbox "Beginn: $DATUM \nEnde: $FERTIG \n$LAUFZEIT" & > > Letzteren Befehl möchte ich wie erwähnt behandeln, doch Konstrukte wie > >> BEFEHL=kdialog --msgbox "Beginn: $DATUM \nEnde: $FERTIG \n$LAUFZEIT" & >> eval "$BEFEHL" Allen Unkenrufen zum Trotz ist das ziemlich einfach. 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\" &" 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. Zum Prüfen: echo "$BEFEHL" - da muss genau der Befehl zurückkommen, immer noch mit den $VARIABLEN und allen Sonderzeichen. 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. Stefan