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
에서 ==
사용하기에 유효하지 않습니다 [
(문자열 동등성은 단일로 테스트됨 =
). 그러나 지원하는 쉘은 [[
단일 대괄호 표기법도 ==
허용하는 것 같습니다 (예: , ). 위의 코드는==
bash
ksh
~ 아니다bash에서 오류가 발생하므로 질문에 다시 태그를 지정하는 것이 좋습니다.