함수 반환 시 프로그램 종료

함수 반환 시 프로그램 종료

이것은 내 코드에서 추출한 것입니다.

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

해당 함수 인수를 일부 문자열과 동일하게 테스트하려면 constructor 를 사용해야 합니다 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.

=그리고 (할당)과 ==(비교) 에 주의하세요 . 테스트 내부에서 연산자 [는 문자열 동일성(숫자가 아님) 과 유사하게 작동 하고 테스트합니다.]===

set -o errexit명령이 0이 아닌 값(비성공)을 반환한 후 즉시 종료됩니다. 귀하의 ninja반품 1(0이 아님) 및 종료.

테스트가 없는 코드가 작동하지 않습니다. 원인 if명령문은 명령 실행을 시도하고 명령의 종료 상태를 결정합니다. 종료 상태가 0(성공)이면 명령이 종료될 때 then까지 명령을 실행합니다 .eliffi

관련 정보