returnhabituellement n'accepte aucune option ( ksh93« accepte de l'habituel --help, --man, --author... cependant). Le seul argument qu'il attend (facultatif) est le code retour. La plage des codes de retour acceptés varie d'un shell à l'autre, et si une valeur en dehors de 0..255 est correctement reflétée, $?elle varie également d'un shell à l'autre. Voir Code de sortie par défaut à la fin du processus? pour plus de détails à ce sujet.
La plupart des shells acceptent des nombres négatifs (après tout, l'argument passé à l' appel _exit()/ exitgroup()system est un int, donc avec des valeurs englobant au moins -2 31 à 2 31 -1, il est donc logique que les shells acceptent la même plage pour ses fonctions) .
La plupart des obus utilisent le waitpid()et co. API pour récupérer cet état de sortie, mais dans ce cas, il est tronqué à un nombre compris entre 0 et 255 lorsqu'il est stocké dans $?. Même si l'invocation d'une fonction n'implique pas la création d'un processus et permet waitpid()de récupérer son état de sortie car tout se fait dans le même processus, de nombreux shells imitent également ce waitpid()comportement lors de l'appel de fonctions. Ce qui signifie que même si vous appelez returnavec une valeur négative, $?contiendra un nombre positif.
Maintenant, parmi les shells dont returnles nombres négatifs sont acceptés (ksh88, ksh93, bash, zsh, pdksh et dérivés autres que mksh, yash), il y en a quelques-uns (pdksh et yash) qui ont besoin de l'écrire return -- -123comme sinon, cela -123est pris comme trois -1, -2, -3options invalides.
Comme pdksh et ses dérivés (comme OpenBSD shou posh) conservent le nombre négatif dans $?, cela signifie que faire return "$?"échouerait lorsqu'il $?contient un nombre négatif (ce qui se produirait lorsque la dernière commande d'exécution était une fonction qui a renvoyé un nombre négatif).
Ce return -- "$?"serait mieux dans ces coquilles. Cependant, notez que bien qu'elle soit prise en charge par la plupart des shells, cette syntaxe n'est pas POSIX et, en pratique, n'est pas prise en charge par mkshles dérivés ash.
Donc, pour résumer, avec des shells basés sur pdksh, vous pouvez utiliser des nombres négatifs dans les arguments des fonctions, mais si vous le faites, return "$@"cela ne fonctionnera pas. Dans d'autres shells, return "$@"cela fonctionnera et vous devriez éviter d'utiliser des nombres négatifs (ou des nombres en dehors de 0..255) comme arguments pour return.
returnest que pour les fonctions définies commef() (...; cmd; return), cela empêche l'optimisation que quelques shells font de l'exécutioncmddans le même processus que le sous-shell. Avec de nombreux shells, cela signifie également que l'état de sortie de la fonction ne porte pas les informations quicmdont été tuées quand il l'a fait (la plupart des shells ne peuvent pas récupérer ces informations de toute façon).