Próbuję napisać skrypt Bash, który używa zmiennej jako wzorca w instrukcji case. Jednak po prostu nie mogę go uruchomić.Używanie zmiennej jako wzorca sprawy w Bash
case:
case "$1" in
$test)
echo "matched"
;;
*)
echo "didn't match"
;;
esac
Próbowałem to z przypisywania $test
jak aaa|bbb|ccc
, (aaa|bbb|ccc)
, [aaa,bbb,ccc]
i kilka innych kombinacji. Próbowałem również tych jako wzór w przypadku: @($test)
, @($(echo $test))
, $($test)
. Nie ma też sukcesu.
EDIT
Dla jasności chciałbym zmiennej do reprezentowania wielu wzorców tak:
case "$1" in
aaa|bbb|ccc)
echo "matched"
;;
*)
echo "didn't match"
;;
esac
+1 za przypomnienie mi użycia 'extgloba'. Nawiasem mówiąc, 'test = '@ (aaa | bbb | ccc)' 'również działa i jest prawdopodobnie lepszą opcją w tym przypadku. – anubhava
To jest niesamowite! Dzięki! @anubhava Dlaczego twoja sugestia byłaby lepsza (@ zamiast +)? – siebz0r
@anubhava Nieważne, znalazłem [tutaj] (https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching). @ dopasowuje jedno wystąpienie, + dopasowuje wiele. – siebz0r