내 코드의 일부는 다음과 같습니다.
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 errexit
0이 아닌 값(실패)을 반환한 후 즉시 명령이 종료됩니다. 귀하의 ninja
복귀 1
(0이 아님) 및 종료.
if
테스트가 없는 코드는 명령문이 코드 내에서 명령을 실행하려고 시도하고 명령의 종료 상태를 결정하기 때문에 제대로 작동하지 않습니다 . 종료 상태가 0(성공)이면 then
다음 elif
명령이 실행됩니다 fi
.