Wie zum Muster in der case-Anweisung in bash-scripting?
Den man
Seite sagt, dass case
Anweisungen verwenden die "filename expansion" pattern-matching".
Möchte ich in der Regel haben kurze Namen für einige Parameter, so gehe ich:
case $1 in
req|reqs|requirements) TASK="Functional Requirements";;
met|meet|meetings) TASK="Meetings with the client";;
esac
logTimeSpentIn "$TASK"
Habe ich versucht Muster wie req*
oder me{e,}t
was ich verstehen würde, erweitern Sie richtig zu passen diese Werte im Zusammenhang mit dem Namen Erweiterung, aber es funktioniert nicht.
InformationsquelleAutor der Frage Ramiro Rela | 2010-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klammer-Erweiterung nicht funktioniert, aber
*
?
und[]
tun. Wenn Sieshopt -s extglob
dann können Sie auch erweiterte pattern-matching:?()
- null oder ein vorkommen von Muster*()
- null oder mehr vorkommen der pattern+()
- ein oder mehr vorkommen der pattern@()
- ein vorkommen von Muster!()
- alles, außer das MusterHier ein Beispiel:
InformationsquelleAutor der Antwort Dennis Williamson
Ich glaube nicht, dass Sie können verwenden Sie geschweifte Klammern.
Gemäß der Bash-Dokumentation über den Fall, in Bedingte Konstrukte.
Nichts über Brace Expansion leider.
Also müsstest du etwas wie das hier tun:
InformationsquelleAutor der Antwort plundra
if
undgrep -E
mehr tragbare LösungPortabilität, empfehle ich, dass Sie nur
if
Aussagen undgrep -E
unterstützt erweiterte reguläre Ausdrückez.B.:POSIX-7
Bash zu Folgen POSIX-standardmäßig ohne
shopt
wie erwähnt von https://stackoverflow.com/a/4555979/895245Hier ist das Zitat: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 Abschnitt "Fall Bedingte Konstrukt":
dann http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13 Abschnitt "2.13. Pattern Matching Notation" nur erwähnt
?
*
und[]
.InformationsquelleAutor der Antwort Ciro Santilli 新疆改造中心 六四事件 法轮功