2016-12-04 5 views
0

한다고 가정 정의되지 않을 경우 : isSomeConditionTrue가 정의 된 경우이 잘 작동조건 기능이 내가 if 문에서 함수를 사용

if isSomeConditionTrue; then 
    echo "true"; 
else 
    echo "false"; 
fi 

.

그러나, isSomeConditionTrue이 정의되지 않은 경우. 오타 또는 가져 오기 누락으로 인해 실패하지 않고 "false"으로 평가됩니다.

set -u은 차이가 없습니다.

+0

이것은 디버깅 문제입니다. 'isSomeConditionTrue'가 정의되어 있는지 확인하십시오. – chepner

답변

1

나는 당신의 if 전에를 삽입하는 것이 좋습니다 :

command_not_found_handle() { false; } 
+0

불행히도 이전 버전의 Bash에서는 작동하지 않는 것 같습니다. –

+0

이것은 정상적인 종료 상태 인 127을 종료 상태 1로 대체합니다. 충분히 새로운 버전의 bash를 사용한다면 실제로 쉘을 종료시키는'command_not_found_handle'을 설정하는 것이 유용 할 수 있습니다. – chepner

1

궁극적으로, 당신은 당신의 스크립트를 디버깅하고 적절한 수입을 가지고 오타를하지 않도록해야합니다. 즉, 정의되지 않은 명령과 정상적인 실패를 구분할 수있는 방법이 있습니다. 스크립트를 통해 사용하려는 것이 아닐 수도 있습니다.

isSomeConditionTrue 
case $? in 
    127) echo "Command not found" ;; 
    0) echo "Command succeeds" ;; 
    *) echo "Some other problem" ;; 
esac 

종료 상태 127은 명령을 찾을 수 없음을 의미합니다. (이는 잘 작동하는 프로그램이 127 상태를 반환하지 않아야 함을 의미하므로 예약 된 반환 값을 고려하십시오.)

+0

특히 많은 조건 함수를 결합 할 때 유익하기는하지만 너무 길다. –