Warum sollte es dich interessieren, was ich sage, obwohl es eine Antwort von mehr als 250 Stimmen gibt?
Es ist nicht das 0 = true
und 1 = false
. Es ist: Null bedeutet kein Fehler (Erfolg) und Nicht-Null bedeutet Fehler (vom Typ N) .
Während die ausgewählte Antwort technisch "wahr" ist, geben Sie bitte nicht return 1
** in Ihren Code für falsch ein . Es wird mehrere unglückliche Nebenwirkungen haben.
- Erfahrene Entwickler werden Sie als Amateur erkennen (aus dem folgenden Grund).
- Erfahrene Entwickler tun dies nicht (aus den folgenden Gründen).
- Es ist fehleranfällig.
- Selbst erfahrene Entwickler können 0 und 1 (aus dem oben genannten Grund) als falsch bzw. wahr verwechseln.
- Es erfordert (oder wird ermutigen) irrelevante und lächerliche Kommentare.
- Es ist eigentlich weniger hilfreich als implizite Rückgabestatus.
Lerne etwas Bash
Das Bash-Handbuch sagt (Hervorhebung von mir)
return [n]
Bewirkt, dass eine Shell-Funktion die Ausführung beendet und den Wert n an ihren Aufrufer zurückgibt. Wenn n nicht angegeben wird , ist der Rückgabewert der Exit-Status des zuletzt in der Funktion ausgeführten Befehls .
Daher müssen wir NIEMALS 0 und 1 verwenden, um Wahr und Falsch anzuzeigen. Die Tatsache, dass sie dies tun, ist im Wesentlichen triviales Wissen, das nur zum Debuggen von Code, zum Befragen von Fragen und zum Umblasen von Neulingen nützlich ist.
Das Bash-Handbuch sagt auch
Andernfalls ist der Rückgabestatus der Funktion der Beendigungsstatus des zuletzt ausgeführten Befehls
Das Bash-Handbuch sagt auch
( $? ) Wird auf den Exit-Status der zuletzt ausgeführten Vordergrund-Pipeline erweitert .
Whoa, warte. Pipeline? Wenden wir uns noch einmal dem Bash-Handbuch zu.
Eine Pipeline ist eine Folge von einem oder mehreren Befehlen, die durch einen der Steueroperatoren '|' getrennt sind. oder '| &'.
Ja. Sie sagten, 1 Befehl sei eine Pipeline. Daher sagen alle drei Zitate dasselbe.
$?
sagt dir, was zuletzt passiert ist.
- Es sprudelt.
Meine Antwort
Während @Kambus demonstrierte, dass mit einer so einfachen Funktion überhaupt keine return
benötigt wird. Ich denke, es war unrealistisch einfach im Vergleich zu den Bedürfnissen der meisten Leute, die dies lesen werden.
Warum return
?
Wenn eine Funktion den Exit-Status ihres letzten Befehls zurückgibt, warum return
überhaupt verwenden? Weil dadurch eine Funktion nicht mehr ausgeführt wird.
Stoppen Sie die Ausführung unter mehreren Bedingungen
01 function i_should(){
02 uname="$(uname -a)"
03
04 [[ "$uname" =~ Darwin ]] && return
05
06 if [[ "$uname" =~ Ubuntu ]]; then
07 release="$(lsb_release -a)"
08 [[ "$release" =~ LTS ]]
09 return
10 fi
11
12 false
13 }
14
15 function do_it(){
16 echo "Hello, old friend."
17 }
18
19 if i_should; then
20 do_it
21 fi
Was wir hier haben ist ...
Zeile 04
ist eine explizite [-ish] Rückgabe true, da die RHS von &&
nur ausgeführt wird, wenn die LHS true war
Zeile 09
gibt entweder wahr oder falsch zurück, was dem Status der Zeile entspricht08
Zeile 13
gibt wegen Zeile falsch zurück12
(Ja, dies kann abgespielt werden, aber das gesamte Beispiel ist erfunden.)
Ein weiteres häufiges Muster
# Instead of doing this...
some_command
if [[ $? -eq 1 ]]; then
echo "some_command failed"
fi
# Do this...
some_command
status=$?
if ! $(exit $status); then
echo "some_command failed"
fi
Beachten Sie, wie das Setzen einer status
Variablen die Bedeutung von entmystifiziert $?
. (Natürlich wissen Sie, was $?
bedeutet, aber jemand, der weniger kenntnisreich ist als Sie, wird es eines Tages googeln müssen. Wenn Ihr Code keinen Hochfrequenzhandel betreibt, zeigen Sie etwas Liebe , setzen Sie die Variable.) Aber das eigentliche Mitnehmen ist das "wenn" Nicht vorhandener Status "oder umgekehrt" wenn Exit-Status "kann laut vorgelesen und deren Bedeutung erklärt werden. Allerdings kann das letzte ein wenig zu ehrgeizig sein , weil das Wort zu sehen , exit
könnten Sie es denken das Skript wird beendet, wenn es in Wirklichkeit die verlässt $(...)
Subshell.
** Wenn Sie unbedingt darauf bestehen, return 1
für false zu verwenden, empfehle ich Ihnen, return 255
stattdessen mindestens zu verwenden . Dies führt dazu, dass Sie oder ein anderer Entwickler, der Ihren Code pflegen muss, die Frage stellen: "Warum ist das 255?" Dann werden sie zumindest aufpassen und eine bessere Chance haben, einen Fehler zu vermeiden.
function
myfun() {...}