Ich versuche, eine Variable zu verwenden, die aus verschiedenen Zeichenfolgen besteht, die mit einem |als caseAnweisungstest 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 foooder barausführen können case. Aber beide foound barbring mich zum zweiten:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
Verwenden "$string"statt $stringmacht 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 caseBedingung in bash zu verwenden. Ist es möglich und wenn ja, wie?
readbisschen hielt mich auf. meiner Meinung nach der Validierung von Benutzereingaben, die sind , was dies zu sein scheint, caseMuster 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".