스크립트의 명령 중 하나에서 오류가 발생하면 어떻게 됩니까?

스크립트의 명령 중 하나에서 오류가 발생하면 어떻게 됩니까?

RPM을 .deb로 변환하기 위해 외계인을 사용했습니다. 나는 외계인의 스크립트 변환을 사용하지 않았습니다. 손으로 변환 중입니다. 실제로 스크립트는 호환되지 않는 일부 구문에 대해 barf를 수행했습니다. 내 질문은 이 비호환성을 해결하는 방법에 관한 것이 아니라 오류가 발생했음에도 불구하고 스크립트가 계속해서 성공적으로 실행되는 방법에 관한 것입니다.

문제가 있는 부분은 다음과 같습니다.

if [ "`/bin/echo '\c'`" == "" ]; then
   ECHO_ESC="/bin/echo"
else
   ECHO_ESC="/bin/echo -e"
fi

이로 인해 다음과 같은 "오류"가 발생합니다.

./avsetup_mcc: 11: [: \c: unexpected operator

그럼에도 불구하고 스크립트는 계속해서 완벽하게 실행됩니다. 그렇다면 여기서 무슨 일이 일어나고 있는 걸까요?

답변1

["특별한 내장"이 아니며POSIX비대화형 쉘("스크립트") Utility syntax error (option or operand error)에 내장된 특수하지 않은 것입니다 .Shall not exit

쉘이 종료되지 않는 이유만큼. 분기 ECHO_ESC방법에 관계없이 정상적인 것으로 설정되어 있기 때문에 스크립트가 완벽하게 작동합니다 if.

오류 메시지에서 제안하는 것과는 달리 오류는 에서 발생하지 않지만 \c에서 ==사용하기에 유효하지 않습니다 [(문자열 동등성은 단일로 테스트됨 =). 그러나 지원하는 쉘은 [[단일 대괄호 표기법도 ==허용하는 것 같습니다 (예: , ). 위의 코드는==bashksh~ 아니다bash에서 오류가 발생하므로 질문에 다시 태그를 지정하는 것이 좋습니다.

관련 정보