¿Por qué debería importarle lo que digo a pesar de que hay una respuesta de más de 250 votos?
No es eso 0 = true
y 1 = false
. Es: cero significa que no hay falla (éxito) y no cero significa falla (de tipo N) .
Si bien la respuesta seleccionada es técnicamente "verdadera" , no ponga return 1
** en su código como falso . Tendrá varios efectos secundarios desafortunados.
- Los desarrolladores experimentados lo verán como un aficionado (por la razón a continuación).
- Los desarrolladores experimentados no hacen esto (por todas las razones a continuación).
- Es propenso a errores.
- Incluso los desarrolladores experimentados pueden confundir 0 y 1 como falso y verdadero respectivamente (por la razón anterior).
- Requiere (o alentará) comentarios extraños y ridículos.
- En realidad, es menos útil que los estados de retorno implícitos.
Aprende un poco de fiesta
El manual de bash dice (énfasis mío)
volver [n]
Provoca que una función de shell deje de ejecutarse y devuelva el valor n a su llamador. Si no se proporciona n , el valor de retorno es el estado de salida del último comando ejecutado en la función.
Por lo tanto, no tenemos que usar NUNCA 0 y 1 para indicar Verdadero y Falso. El hecho de que lo hagan es esencialmente un conocimiento trivial útil solo para depurar código, preguntas de entrevistas y hacer volar las mentes de los novatos.
El manual de bash también dice
de lo contrario, el estado de retorno de la función es el estado de salida del último comando ejecutado
El manual de bash también dice
( $? ) Se expande al estado de salida de la canalización en primer plano ejecutada más recientemente .
Whoa, espera. ¿Tubería? Pasemos al manual de bash una vez más.
Una tubería es una secuencia de uno o más comandos separados por uno de los operadores de control '|' o '| &'.
Si. Dijeron que 1 comando es una tubería. Por lo tanto, las 3 citas dicen lo mismo.
$?
te dice lo que pasó la última vez.
- Burbujea
Mi respuesta
Entonces, mientras @Kambus demostró que con una función tan simple, noreturn
se necesita nada. Creo que era poco realista en comparación con las necesidades de la mayoría de las personas que leerán esto.
Por qué return
?
Si una función va a devolver el estado de salida de su último comando, ¿por qué usar return
? Porque hace que una función deje de ejecutarse.
Detener la ejecución en múltiples condiciones
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
Lo que tenemos aquí es ...
La línea 04
es un retorno explícito [-ish] verdadero porque el RHS de&&
solo se ejecuta si el LHS era verdadero
La línea 09
devuelve verdadero o falso que coincide con el estado de la línea08
La línea 13
devuelve falso debido a la línea12
(Sí, esto se puede reducir, pero todo el ejemplo está ideado).
Otro patrón común
# 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
Observe cómo establecer una status
variable desmitifica el significado de $?
. (Por supuesto, usted sabe lo que $?
significa, pero alguien con menos conocimiento que usted tendrá que buscarlo en Google algún día. A menos que su código esté haciendo operaciones de alta frecuencia, muestre algo de amor , establezca la variable). Pero la verdadera conclusión es que "si no existe el estado "o viceversa" si el estado de salida "se puede leer en voz alta y explicar su significado. Sin embargo, ese último puede ser un poco ambicioso porque ver la palabra exit
podría hacerte pensar que está saliendo del script, cuando en realidad está saliendo del $(...)
subshell.
** Si insiste absolutamente en usar return 1
para falso, le sugiero que al menos lo use return 255
en su lugar. Esto hará que tu futuro yo o cualquier otro desarrollador que deba mantener tu código se pregunte "¿por qué es 255?" Entonces al menos estarán prestando atención y tendrán una mejor oportunidad de evitar un error.
function
palabra clave,myfun() {...}
basta