Ich versuche, ein Bash-Skript zu schreiben, das eine Variable als Muster in einer case-Anweisung verwendet. Aber ich kann es einfach nicht zur Arbeit bringen.Verwenden von Variablen als Groß-/Kleinschreibung in Bash
Case-Anweisung:
case "$1" in
$test)
echo "matched"
;;
*)
echo "didn't match"
;;
esac
Ich habe schon versucht, diese mit Zuordnung $test
als aaa|bbb|ccc
, (aaa|bbb|ccc)
, [aaa,bbb,ccc]
und mehrere andere Kombinationen. Ich habe auch diese als Muster in der Fallanweisung ausprobiert: @($test)
, @($(echo $test))
, $($test)
. Auch kein Erfolg.
EDIT
Aus Gründen der Klarheit, würde ich die Variable wie diese mehrere Muster wie darzustellen:
case "$1" in
aaa|bbb|ccc)
echo "matched"
;;
*)
echo "didn't match"
;;
esac
+1 für die Erinnerung an die Verwendung von 'extglob'. Übrigens funktioniert 'test = '@ (aaa | bbb | ccc)' 'auch und ist in diesem Fall wahrscheinlich die bessere Option. – anubhava
Das ist großartig! Vielen Dank! @anubhava Warum sollte dein Vorschlag besser sein (@ anstatt +)? – siebz0r
@anubhava Macht nichts, fand es [hier] (https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching). @ entspricht einem Vorkommen, + entspricht mehreren Vorkommen. – siebz0r