Saída do programa ao retornar em uma função

Saída do programa ao retornar em uma função

Este é um extrato do meu 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 "$@"

Sem motivo algum, quando minha função retorna algo, o programa simplesmente sai (testei com um trap EXIT), a função retorna 4 e executa o trap.

Editar: funciona quando eu comento

set -o errexit
set -o errtrace

Mas como posso encontrar o erro?

Responder1

Se você quiser testar aquele argumento de função equivalente a alguma string, você deve usar construct if [ "$x" == "string" ], então seu código ficará assim:

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 "$@"

E você poderia usar testo nome para a função. Se você quiser chamar builtin test, use builtin testconstruct.

E tome cuidado com =(atribuição) e ==(comparação). Dentro do teste [e ]do =operador funciona como ==e testa a igualdade de strings (não números).

set -o errexitsai imediatamente após o comando retornar diferente de zero (sem sucesso). Seus ninjaretornos 1(que são diferentes de zero) e saída.

Seu código sem testes não está funcionando porque ifa instrução tenta executar instruções nele e determinar o estado de saída do comando: se o estado de saída for zero (sucesso), execute as instruções após thenaté elifde fi.

informação relacionada