Las funciones en Bash no son funciones como en otro idioma; en realidad son comandos. Por lo tanto, las funciones se usan como si fueran binarios o scripts extraídos de su ruta. Desde la perspectiva de la lógica de su programa, realmente no debería haber diferencia.
Los comandos de Shell están conectados por canalizaciones (también conocidos como flujos) y no por tipos de datos fundamentales o definidos por el usuario, como en los lenguajes de programación "reales". No existe un valor de retorno para un comando, tal vez principalmente porque no hay una forma real de declararlo. Podría ocurrir en la página de manual o en la --help
salida del comando, pero ambos son legibles por humanos y, por lo tanto, están escritos al viento.
Cuando un comando quiere obtener una entrada, la lee de su flujo de entrada o de la lista de argumentos. En ambos casos, las cadenas de texto deben analizarse.
Cuando un comando quiere devolver algo, debe echo
hacerlo en su flujo de salida. Otra forma practicada a menudo es almacenar el valor de retorno en variables dedicadas y globales. Escribir en la secuencia de salida es más claro y más flexible, porque también puede tomar datos binarios. Por ejemplo, puede devolver un BLOB fácilmente:
encrypt() {
gpg -c -o- $1 # encrypt data in filename to stdout (asks for a passphrase)
}
encrypt public.dat > private.dat # write function result to file
Como otros han escrito en este hilo, la persona que llama también puede usar la sustitución de comandos $()
para capturar la salida.
Paralelamente, la función "devolvería" el código de salida de gpg
(GnuPG). Piense en el código de salida como un bono que otros idiomas no tienen o, dependiendo de su temperamento, como un "Schmutzeffekt" de funciones de shell. Este estado es, por convención, 0 en caso de éxito o un número entero en el rango 1-255 para otra cosa. Para aclarar esto: return
(like exit
) solo puede tomar un valor de 0-255, y los valores distintos de 0 no son necesariamente errores, como se afirma a menudo.
Cuando no proporciona un valor explícito, return
el estado se toma del último comando en una declaración / función / comando Bash, etc. Por lo tanto, siempre hay un estado y return
es solo una forma fácil de proporcionarlo.
return
en su caso es esencialmente el mismoexit code
que el rango de0 - 255
. Useecho
según lo sugerido por @septi. Los códigos de salida se pueden capturar con$?
.