Выход из программы при возврате в функцию

Выход из программы при возврате в функцию

Вот фрагмент моего кода:

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

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

main "$@"

Без всякой причины, когда моя функция что-то возвращает, программа просто завершает работу (я тестировал с помощью ловушки EXIT), функция возвращает 4 и выполняет ловушку.

Редактировать: работает, когда я комментирую

set -o errexit
set -o errtrace

Но как мне найти ошибку?

решение1

Если вы хотите проверить, эквивалентен ли аргумент функции некоторой строке, вы должны использовать construct if [ "$x" == "string" ], тогда ваш код будет выглядеть так:

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

И вы могли бы использовать testимя для функции. Если вы хотите вызвать builtin test, то используйте builtin testconstruct.

И позаботьтесь о =(присваивании) и ==(сравнении). Внутри теста [и ]оператор =работает как ==и проверяет равенство строк (не чисел).

set -o errexitвыходит сразу после того, как команда возвращает ненулевое значение (неуспешное). Ваш ninjaвозвращает 1(которое ненулевое значение) и выходит.

Ваш код без тестов не работает, так как ifоператор пытается выполнить инструкции в нем и определить состояние выхода команды: если состояние выхода равно нулю (успех), то выполнить инструкции после thenuntil elifof fi.

Связанный контент