if und grep -Eq
arg='abc'
if echo "$arg" | grep -Eq 'a.c|d.*'; then
echo 'first'
elif echo "$arg" | grep -Eq 'a{2,3}'; then
echo 'second'
fi
wo:
-qverhindert grep, dass eine Ausgabe erzeugt wird, erzeugt nur den Exit-Status
-E aktiviert erweiterte reguläre Ausdrücke
Ich mag das, weil:
Ein Nachteil ist, dass dies wahrscheinlich langsamer ist als beim caseAufrufen eines externen grepProgramms, aber ich neige dazu, die Leistung bei der Verwendung von Bash als letztes zu betrachten.
case ist POSIX 7
Bash scheint standardmäßig POSIX zu folgen, ohne shoptwie von erwähnt https://stackoverflow.com/a/4555979/895245 angegeben
Hier ist das Zitat: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 Abschnitt "Case Conditional Construct":
Der Fall des bedingten Konstrukts muss die zusammengesetzte Liste ausführen, die dem ersten von mehreren Mustern entspricht (siehe Mustervergleichsnotation). [...] Mehrere Muster mit derselben zusammengesetzten Liste werden durch das '|' Symbol. [...]
Das Format für das Fallkonstrukt lautet wie folgt:
case word in
[(] pattern1 ) compound-list ;;
[[(] pattern[ | pattern] ... ) compound-list ;;] ...
[[(] pattern[ | pattern] ... ) compound-list]
esac
und dann http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13 Abschnitt "2.13. Pattern Matching Notation" nur erwähnt ?, *und [].