Aus einem Befehl erhalte ich einige Argumente, die ich dem Benutzer mit der select-Anweisung von bash in einem Shell-Skript anbieten möchte. Die vom Befehl angegebenen Argumente können Leerzeichen enthalten und sind daher durch Anführungszeichen geschützt. Hier ist ein vereinfachtes Beispiel.
Das funktioniert wie erwartet:
select opt in a b "c d"
do
echo $opt
break
done
Die Ausgabe ist wie erwartet:
1) a
2) b
3) c d
#?
Aber mit der Ausgabe des Befehls in einer Variablen funktioniert es nicht wie erwartet:
opts="a b \"c d\""
select opt in $opts
do
echo $opt
break
done
Obwohl $ opts dasselbe enthält wie die hartcodierte Eingabe im ersten Auswahlbeispiel, ist die Ausgabe anders:
1) a
2) b
3) "c
4) d"
#?
Es ist also nicht so, dass Bash die Zitate aufgebraucht hat. Sie werden beibehalten, aber die Anführungszeichen enthalten keine Argumente wie bei der harten Kodierung. Wie ich bereits geschrieben habe, erhalte ich die Argumente als Ausgabe eines Befehls. Sie können Leerzeichen enthalten und sind daher bereits durch Anführungszeichen geschützt. Wie bringe ich sie in einem Stück zur 'select'-Anweisung? Es geht nicht um einfache und doppelte Anführungszeichen. Mit einfachen Anführungszeichen passiert dasselbe:
1) a
2) b
3) 'c
4) d'
#?