Ich versuche, eine Variable zu verwenden, die aus verschiedenen Zeichenfolgen besteht, die mit einem |
als case
Anweisungstest getrennt sind. Beispielsweise:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Ich möchte den ersten Teil der Anweisung eingeben foo
oder bar
ausführen können case
. Aber beide foo
und bar
bring mich zum zweiten:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
Verwenden "$string"
statt $string
macht keinen Unterschied. Weder tut mit string="foo|bar"
.
Ich weiß, dass ich es so machen kann:
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Ich kann mir verschiedene Problemumgehungen vorstellen, möchte aber wissen, ob es möglich ist, eine Variable als case
Bedingung in bash zu verwenden. Ist es möglich und wenn ja, wie?
read
bisschen hielt mich auf. meiner Meinung nach der Validierung von Benutzereingaben, die sind , was dies zu sein scheint, case
Muster sollte nicht an der Spitze der Auswertungsliste sein, und eher das sollte beschneidet nach unten *
Standardmustern , so dass die einzigen Ergebnisse , die es zu erreichen sind akzeptabel garantiert. Da es sich jedoch um eine Analyse- / Erweiterungsreihenfolge handelt, kann eine zweite Bewertung erforderlich sein.
eval
, $ Wahl zu entkommen, die Pars, Stern, Semikolons und Zeilenumbrüche. Hässlich, aber es "funktioniert".