Valor de retorno en una función Bash
Estoy trabajando con un script bash y quiero ejecutar una función para imprimir un valor de retorno:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Cuando ejecuto fun2
, no imprime "34". ¿Por qué ocurre esto?
265
3
Aunque bash tiene una sentencia
return
, lo único que puedes especificar con ella es el propio estado deexit
de la función (un valor entre0
y255
, 0 significa "éxito"). Así quereturn
no es lo que quieres.Puede que quieras convertir tu declaración
return
en una declaraciónecho
- de esa manera la salida de tu función podría ser capturada usando llaves$()
, que parece ser exactamente lo que quieres.Aquí hay un ejemplo:
Otra forma de obtener el valor de retorno (si sólo quieres devolver un entero 0-255) es
$?
.Además, tenga en cuenta que puede utilizar el valor de retorno para utilizar la lógica booleana como
fun1 || fun2
sólo se ejecutaráfun2
sifun1
devuelve un valor0
. El valor de retorno por defecto es el valor de salida de la última sentencia ejecutada dentro de la función.$(...)
captura el texto enviado a stdout por el comando que contiene.return
no envía el texto a stdout. contiene el código de resultado del último comando.La sentencia
return
establece el código de salida de la función, al igual queexit
lo hará para todo el script.El código de salida del último comando siempre está disponible en la variable
$?
.