Bash: Escapen in Scripten

Hallo,

folgendes habe ich versucht:
DOPT=„1 „Test 1“ 1 2 „Test2“ 1“
echo Xdialog -checklist Test 0 0 5 $DOPT

Da kommt korrekt
Xdialog -checklist Test 0 0 5 1 „Test 1“ 1 2 „Test2“ 1
wenn ich die Zeile so ausführe, funktioniert das.

Mache ich jetzt aus der letzten Zeile
RESULT=Xdialog -checklist Test 0 0 5 $DOPT
sagt XDialog „falsche Anzahl Parameter“, was wahrscheinlich daran liegt, das die mit in „“ mit Leerzeichen dazwischen nicht als ein Parameter gezählt werden.

Wo muss man da zusätzlich escapen ?

Alexander

Hallo Alexander,

folgendes habe ich versucht:
DOPT=„1 „Test 1“ 1 2 „Test2“ 1“
RESULT=Xdialog -checklist Test 0 0 5 $DOPT

Wo muss man da zusätzlich escapen ?

zum Ausführen von beliebigen, dynamisch zusammengebauten Strings als Befehl ist
eval zuständig:

RESULT=`eval "Xdialog -checklist Test 0 0 5 $DOPT"`

oder etwas schöner ohne die veralteten Backticks:

RESULT=$(eval "Xdialog -checklist Test 0 0 5 $DOPT")

Warum Deine Variante

RESULT=`Xdialog -checklist Test 0 0 5 $DOPT`

nicht funktioniert, siehst Du, wenn der Debugmodus der bash aktiviert
wird (per set -x).

Hier am Beispiel des xterm-Kommandos mit einem Titelparameter, der Leerzeichen enthält und deshalb in Anführungszeichen gesetzt werden muss:

$ set -x
+ set -x

$ PARA="-title \"Hallo Welt\""
+ PARA='-title "Hallo Welt"'

# So nicht, denn hier führt die Shell nur den Befehl xterm -title '"Hallo' aus und 
# sieht nach der Ausführung einen weiteren Befehl 'Welt"'

$ result=`xterm $PARA`
++ xterm -title '"Hallo' 'Welt"'
No absolute path found for shell: Welt"
+ result=

# eval ist hier Dein Freund:
$ result=`eval "xterm $PARA"`
++ eval 'xterm -title "Hallo Welt"'
+++ xterm -title 'Hallo Welt'
+ result=

Gruß,
-Andreas.

Hallo Andreas,

vielen Dank für die Antwort und die Erklärung !

Alexander