Die man
Seite sagt, dass case
Anweisungen "Dateinamen-Erweiterungsmuster-Matching" verwenden.
Normalerweise möchte ich kurze Namen für einige Parameter haben, also gehe ich:
case $1 in
req|reqs|requirements) TASK="Functional Requirements";;
met|meet|meetings) TASK="Meetings with the client";;
esac
logTimeSpentIn "$TASK"
Ich habe versucht, Muster wie req*
oder von me{e,}t
denen ich verstehe, dass sie korrekt erweitert werden, um diesen Werten im Kontext der Dateinamenerweiterung zu entsprechen, aber es funktioniert nicht.
bash
case-statement
Ramiro Rela
quelle
quelle
Ich glaube nicht, dass Sie Zahnspangen verwenden können.
Laut Bash-Handbuch zum Fall in Conditional Constructs .
Nichts über die Erweiterung der ZahnspangeLeider .
Sie müssten also so etwas tun:
case $1 in req*) ... ;; met*|meet*) ... ;; *) # You should have a default one too. esac
quelle
if
undgrep -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
verhindertgrep
, dass eine Ausgabe erzeugt wird, erzeugt nur den Exit-Status-E
aktiviert erweiterte reguläre AusdrückeIch mag das, weil:
case
Ein Nachteil ist, dass dies wahrscheinlich langsamer ist als beim
case
Aufrufen eines externengrep
Programms, aber ich neige dazu, die Leistung bei der Verwendung von Bash als letztes zu betrachten.case
ist POSIX 7Bash scheint standardmäßig POSIX zu folgen, ohne
shopt
wie von erwähnt https://stackoverflow.com/a/4555979/895245 angegebenHier ist das Zitat: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 Abschnitt "Case Conditional Construct":
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[]
.quelle