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?
Aunque bash tiene una sentencia return
, lo único que puedes especificar con ella es el propio estado de exit
de la función (un valor entre 0
y 255
, 0 significa "éxito"). Así que return
no es lo que quieres.
Puede que quieras convertir tu declaración return
en una declaración echo
- 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:
function fun1(){
echo 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Otra forma de obtener el valor de retorno (si sólo quieres devolver un entero 0-255) es $?
.
function fun1(){
return 34
}
function fun2(){
fun1
local res=$?
echo $res
}
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
si fun1
devuelve un valor 0
. El valor de retorno por defecto es el valor de salida de la última sentencia ejecutada dentro de la función.
La sentencia return
establece el código de salida de la función, al igual que exit
lo hará para todo el script.
El código de salida del último comando siempre está disponible en la variable $?
.
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}