Ich suche nach der richtigen Syntax der switch-Anweisung mit Fallthrough-Fällen in Bash (idealerweise ohne Berücksichtigung der Groß- und Kleinschreibung). In PHP würde ich es wie folgt programmieren:
switch($c) {
case 1:
do_this();
break;
case 2:
case 3:
do_what_you_are_supposed_to_do();
break;
default:
do_nothing();
}
Ich möchte dasselbe in Bash:
case "$C" in
"1")
do_this()
;;
"2")
"3")
do_what_you_are_supposed_to_do()
;;
*)
do_nothing();
;;
esac
Das funktioniert irgendwie nicht: Die Funktion do_what_you_are_supposed_to_do()
sollte ausgelöst werden, wenn $ C 2 ODER 3 ist.
bash
switch-statement
Mischka
quelle
quelle
function fname { echo "Inside fname"; return 0; }
oder einenfname() { echo "inside fname"; return 0; }
Parens für einen Funktionsaufruf verwenden, kann dies so aussehen, als wäre es eine Funktionsdefinition. Funktionen sind wie alle anderen Kommandozeilen - Programm wie genannt werdenmv
,cp
,rsync
,ls
,cd
, etc ... In diesem Fall sind wir fname gerne so nennen:fname $ARGS
.do_nothing()
soll eine SKIP-Erklärung sein? Verwenden Sie:
.Antworten:
Verwenden Sie einen vertikalen Balken (
|
) für "oder".quelle
[23])
do_what_you_are_supposed_to_do()
sowohl "2" als auch "3" in einem einzigen Fall zusammenfassen, wird dies nicht behoben . Ich bin mir nicht sicher, ob es sinnvoll ist, die Frage zu bearbeiten, um dies klarer zu machen, da es offensichtlich ist, dass viele Leute diese Antwort hilfreich fanden.break
in der PHP - Code.) Bearbeiten der Frage, oder der Titel, zu diesem Zeitpunkt viele Antworten ungültig machen würde , die keine Durchfall Logik zur Verfügung stellen, und wahrscheinlich nicht getan werden sollte. Fall-through war erst nach mehreren Änderungen durch andere Benutzer im Titel enthalten, aber es ist zu spät, um es jetzt wieder herauszunehmen.Neuere
bash
Versionen ermöglichen das Durchfallen durch Verwendung;&
von anstelle von;;
: Sie ermöglichen auch die Wiederaufnahme der Fallprüfungen, indem sie;;&
dort verwendet werden.Beispielausgabe
quelle
;&
und wirklich zeigt;;&
. Ich änderte die"24"
an;;& # resume
und bekam die gleichen Ergebnisse, so frage ich mich immer noch , wenn Sie verwenden würden;&
fallthrough.?4
,[13]4
um es offensichtlicher zu machen und um Ihre Änderung zu einer bahnbrechenden Änderung zu machen()
Sie in bash keine Funktionsnamen hinter, es sei denn, Sie möchten sie definieren.[23]
für den Fall, dass2
oder3
''
statt eingeschlossen werden""
Wenn eingeschlossen
""
, versucht der Interpreter (unnötig), mögliche Variablen im Wert vor dem Abgleich zu erweitern.Für Übereinstimmungen ohne Berücksichtigung der Groß- und Kleinschreibung können Sie Zeichenklassen (wie
[23]
) verwenden:Hat
abra
aber zu keinem Zeitpunkt getroffen, da es vom ersten Fall abgeglichen wird.Bei Bedarf können Sie
;;
im ersten Fall weglassen, um auch in den folgenden Fällen nach Übereinstimmungen zu suchen. (;;
springt zuesac
)quelle
case "${C,,}" in
wenn die Groß- / Kleinschreibung nicht wichtig ist;;
?;&
Solltest du nicht zum Durchfallen verwenden?;;
ich ihn verwenden muss,;;&
wenn ich weiter testen möchte.do_wild_mysterious_things
machte meinen TagVersuche dies:
quelle
Wenn die Werte ganzzahlig sind, können Sie sie verwenden
[2-3]
oder[5,7,8]
für nicht kontinuierliche Werte verwenden.Wenn die Werte Zeichenfolge sind, können Sie verwenden
|
.quelle
shift
am Ende?shift
Entfernt das erste Argument in der Liste der CLI-Argumente. Grundsätzlich wird bei jeder Iteration dieser Schleife immer$1
verwendet, um jedes Argument mit Hilfe von aus der CLI-Argumentliste abzurufenshift
.