Pourquoi vous devriez vous soucier de ce que je dis malgré qu'il y ait une réponse de plus de 250 votes positifs
Ce n'est pas ça 0 = true
et 1 = false
. Il est: zéro signifie pas d'échec (succès) et non nul signifie échec (de type N) .
Bien que la réponse sélectionnée soit techniquement "vraie", veuillez ne pas mettre return 1
** dans votre code pour faux . Il aura plusieurs effets secondaires malheureux.
- Les développeurs expérimentés vous repéreront comme un amateur (pour la raison ci-dessous).
- Les développeurs expérimentés ne le font pas (pour toutes les raisons ci-dessous).
- Il est sujet aux erreurs.
- Même les développeurs expérimentés peuvent confondre 0 et 1 comme faux et vrai respectivement (pour la raison ci-dessus).
- Cela nécessite (ou encouragera) des commentaires étrangers et ridicules.
- C'est en fait moins utile que les statuts de retour implicites.
Apprenez quelques bash
Le manuel bash dit (soulignement le mien)
retourner [n]
Faire arrêter une fonction shell et renvoyer la valeur n à son appelant. Si n n'est pas fourni , la valeur de retour est l' état de sortie de la dernière commande exécutée dans la fonction.
Par conséquent, nous ne devons JAMAIS utiliser 0 et 1 pour indiquer Vrai et Faux. Le fait qu'ils le fassent est essentiellement une connaissance insignifiante utile uniquement pour le débogage du code, les questions d'entrevue et la stupéfaction des débutants.
Le manuel bash dit également
sinon l'état de retour de la fonction est l' état de sortie de la dernière commande exécutée
Le manuel bash dit également
( $? ) Se développe jusqu'à l' état de sortie du dernier pipeline de premier plan exécuté .
Attends. Pipeline? Passons au manuel bash une fois de plus.
Un pipeline est une séquence d' une ou plusieurs commandes séparées par l'un des opérateurs de contrôle '|' ou '| &'.
Oui. Ils ont dit que 1 commandement est un pipeline. Par conséquent, les 3 de ces citations disent la même chose.
$?
vous dit ce qui s'est passé en dernier.
- Ça bouillonne.
Ma réponse
Ainsi, alors que @Kambus a démontré qu'avec une fonction aussi simple, aucune return
n'est nécessaire du tout. Je pense que c'était irréaliste par rapport aux besoins de la plupart des gens qui liront ceci.
Pourquoi return
?
Si une fonction doit retourner l'état de sortie de sa dernière commande, pourquoi l'utiliser return
? Parce que cela provoque l'arrêt d'une fonction.
Arrêter l'exécution dans plusieurs conditions
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
Ce que nous avons ici est ...
La ligne 04
est un retour explicite [-ish] true car le RHS de &&
n'est exécuté que si le LHS était vrai
La ligne 09
renvoie soit vrai soit faux correspondant à l'état de la ligne08
La ligne 13
renvoie faux à cause de la ligne12
(Oui, cela peut être analysé, mais l'exemple entier est artificiel.)
Un autre modèle courant
# 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
Remarquez comment la définition d'une status
variable démystifie la signification de $?
. (Bien sûr, vous savez ce que cela $?
signifie, mais quelqu'un de moins bien informé que vous devrez le faire un jour sur Google. À moins que votre code ne fasse du trading à haute fréquence, montrez un peu d'amour , définissez la variable.) Mais le véritable avantage est que "si pas d'existence d'état "ou inversement" si l'état de sortie "peut être lu à haute voix et expliquer leur signification. Cependant, ce dernier peut être un peu trop ambitieux car voir le mot exit
peut vous faire penser qu'il quitte le script, alors qu'en réalité il quitte le $(...)
sous - shell.
** Si vous insistez absolument sur l'utilisation return 1
de faux, je vous suggère au moins d'utiliser à la return 255
place. Cela amènera votre futur moi-même ou tout autre développeur qui doit maintenir votre code à se demander "pourquoi est-ce 255?" Ensuite, ils feront au moins attention et auront plus de chances d'éviter une erreur.
function
mot clé,myfun() {...}
suffit