Salida del programa al regresar en una función.

Salida del programa al regresar en una función.

Este es un extracto de mi código:

ninja ()
{
  if $1 = toto
  then
  return 1
  elif $1 = tata
  then
  return 4
  fi
}

main () {
  ninja "tata"
  if [ $? -ne 1 ]
  then
    somecode
  fi
}

main "$@"

Sin ningún motivo, cuando mi función devuelve algo, el programa simplemente sale (lo he probado con una trampa EXIT), la función devuelve 4 y ejecuta la trampa.

Editar: funciona cuando comento

set -o errexit
set -o errtrace

Pero, ¿cómo puedo encontrar el error?

Respuesta1

Si desea probar el argumento de esa función equivalente a alguna cadena, debe usar construct if [ "$x" == "string" ], entonces su código se verá así:

test () {
  if [ "$1" == "toto" ] then
    return 1
  elif [ "$1" == "tata" ] then
    return 4
  fi
}

main () {
  test "tata"
  if [ $? -ne 1 ] then
    echo "somecode"
  fi
}

main "$@"

Y podrías usar testel nombre de la función. Si desea llamar a buildin test, utilice builtin testconstruct.

Y ocúpate de =(tarea) y ==(comparación). Dentro de la prueba [, ]el =operador funciona ==y prueba la igualdad de cadenas (no los números).

set -o errexitsale inmediatamente después de que el comando devuelve un valor distinto de cero (no exitoso). Tus ninjaretornos 1(que no son cero) y salida.

Su código sin pruebas no funciona porque ifla declaración intenta ejecutar instrucciones en él y determinar el estado de salida del comando: si el estado de salida es cero (éxito), ejecute las instrucciones después de thenhasta elifel fi.

información relacionada