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:
-q
verhindert 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 case
Aufrufen eines externen grep
Programms, 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 shopt
wie 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 []
.