Saltar al contenido

Valor de retorno en una función Bash

Solución:

Aunque bash tiene un return declaración, lo único que puede especificar con ella es la propia función exit estado (un valor entre 0 y 255, 0 significa “éxito”). Entonces return no es lo que quieres.

Es posible que desee convertir su return declaración a un echo declaración: de esa manera, la salida de su función podría capturarse 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 solo desea devolver un número entero 0-255) es $?.

function fun1(){
  return 34
}

function fun2(){
  fun1
  local res=$?
  echo $res
}

Además, tenga en cuenta que puede usar el valor de retorno para usar lógica booleana como fun1 || fun2 solo correrá fun2 Si fun1 devuelve un no0 valor. El valor de retorno predeterminado es el valor de salida de la última instrucción ejecutada dentro de la función.

$(...) captura el texto enviado a stdout por el comando contenido dentro. return no se envía a stdout. $? contiene el código de resultado del último comando.

fun1 (){
  return 34
}

fun2 (){
  fun1
  local res=$?
  echo $res
}

Las funciones en Bash no son funciones como en otros lenguajes; en realidad son comandos. Por lo tanto, las funciones se utilizan 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 conductos (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 tal cosa como 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 solo legibles por humanos y, por lo tanto, están escritos al viento.

Cuando un comando quiere obtener una entrada, lo 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, tiene que echo a su flujo de salida. Otra forma que se practica a menudo es almacenar el valor de retorno en variables globales dedicadas. Escribir en el flujo de salida es más claro y 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 una ventaja que otros lenguajes 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 dejar esto en claro: return (como 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 proporcionas un valor explícito con return el estado se toma del último comando en una instrucción / función / comando de Bash y así sucesivamente. Así que siempre hay un estado y return es solo una forma fácil de proporcionarlo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *