내 함수 호출이 아래 if 조건에서 부울 값으로 평가되지 않는 이유는 무엇입니까?
함수 호출에서 반환할 때 숫자를 부울로 사용해야 합니까?
#!/bin/bash
#Script to wait for log file to start and open it using less
function is_log_started()
{
if test -f "log/server.log"; then
return true
fi
return false
}
if [ is_log_started = true ]; then
echo "log started"
fi
답변1
셸 함수는 0에서 255 사이의 정수만 반환할 수 있습니다. 이는 실행 파일에 적용되는 것과 동일한 제한 사항입니다. 숫자가 아닌 인수를 전달하면 다른 쉘이 다르게 반응합니다. bash는 오류 메시지를 인쇄합니다.
$ bash -c 'f () { return true; }; f; echo $?'
bash: line 0: return: true: numeric argument required
2
프로그램을 종료할 때와 마찬가지로 true이면 0을, false이면 1에서 125 사이의 값을 전달합니다. 126에서 255 사이의 값도 거짓이지만 일반적인 의미(프로그램을 시작할 수 없거나 신호에 의해 프로그램이 종료됨)를 갖습니다.
function is_log_started()
{
if test -f "log/server.log"; then
return 0
fi
return 1
}
하지만 쓰는 방법이 복잡해요
function is_log_started
{
test -f "log/server.log"
}
쉘 함수의 반환 상태는 마지막으로 실행된 명령문의 반환 상태입니다.
당신의 테스트도 잘못되었습니다. 및 가 동일한 문자열인지 [ is_log_started = true ]
테스트합니다 . 함수 호출의 반환 상태가 true인지 테스트하려면 함수를 호출하기만 하면 됩니다. 모든 쉘 명령은 이미 부울입니다. 명령이 0을 반환하면 true이고 그렇지 않으면 false입니다.is_log_started
true
function is_log_started
{
test -f "log/server.log"
}
if is_log_started; then
echo "log started"
fi
답변2
이미 알고 계시겠지만 기능을 완전히 제거하고 다음을 사용해도 됩니다.
if [ -f "log/server.log" ] ; then echo "log started" ; fi
답변3
작성된 대로 문자열 "is_log_started"와 "true"를 비교하고 있으며 후자는 항상 false입니다.
테스트는 다음과 같아야 합니다.
if is_log_started; then
그리고 테스트를 완료하려면 함수가 실제로 true(0) 또는 false(예: 1)를 반환해야 합니다.