
이것은 내 코드에서 추출한 것입니다.
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
까지 명령을 실행합니다 .elif
fi