함수가 반환되면 프로그램이 종료됩니다.

함수가 반환되면 프로그램이 종료됩니다.

내 코드의 일부는 다음과 같습니다.

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

특정 문자열에 해당하는 함수 매개변수를 테스트하려면 Construction 을 사용해야 하며 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함수 이름을 사용할 수 있습니다 . 내장을 호출하려면 구성을 test사용하십시오 builtin test.

그리고 =(할당)과 ==(비교)를 기록해 두세요. test 내부에서 연산자는 [다음 과 같이 작동하며 (숫자 대신) 문자열 동일성을 테스트합니다.]===

set -o errexit0이 아닌 값(실패)을 반환한 후 즉시 명령이 종료됩니다. 귀하의 ninja복귀 1(0이 아님) 및 종료.

if테스트가 없는 코드는 명령문이 코드 내에서 명령을 실행하려고 시도하고 명령의 종료 상태를 결정하기 때문에 제대로 작동하지 않습니다 . 종료 상태가 0(성공)이면 then다음 elif명령이 실행됩니다 fi.

관련 정보