WTH - 명령을 찾을 수 없음 - if 문 - bash 스크립트

WTH - 명령을 찾을 수 없음 - if 문 - bash 스크립트

if 문의 잘못된 공백으로 인해 "명령을 찾을 수 없음" 오류가 발생하는 유사한 게시물을 본 적이 있습니다.

빈 오류를 찾을 수 없습니다. 그들은 어디에 있나요? 또 무엇이 있을까요?

기본적으로 플래그(아래) 없이 test.sh를 실행하면 터미널에서 "명령을 찾을 수 없습니다"와 같은 무례한 외설적인 소리를 지르기 시작합니다. 로고를 사용하면 매우 효과적입니다. 나는 bash에 플래그를 계속 매수하고 싶지 않습니다. 이는 장기적인 건강에 해롭습니다.

이 시간은테스트 파일:

verbose='false'
aflag=''
bflag=''
sflag=''
files=''
while getopts 'absf:v' flag; do
    case "${flag}" in
        a) aflag='true';;
        b) blag='true' ;;
        s) sflag='true' ;;
        f) files="${OPTARG}" ;;
        v) verbose='true';;
        *) error "Unexpected option ${flag}" ;;
    esac
done

# ======= Below this is where the error gets thrown
if "$sflag" ;
then
  echo "okay" ;
fi
# ======= end error throwing code 

echo "end" # this prints just fine

위의 스크립트를 실행합니다.

$ bash test.sh

그럼 난 다시 올게

test.sh: line 17: : command not found
end

Bash가 합리적으로 행동하도록 설득하는 방법에 대해 조언을 줄 수 있는 사람이 있나요?

저는 Mac을 사용하고 있습니다(이것이 중요한지 모르겠습니다).

답변1

오류는 플래그를 전달하지 않아 전체 while getopts루프가 실행되지 않는다는 것입니다. $sflag루프는 비어 있으므로 bash가 실제로 실행되는 것은 다음과 같습니다.

if ""; then echo "okay" ; fi

가장 간단한 해결책은 변수를 false로 초기화하는 것입니다.

verbose='false'
aflag='false'
bflag='false'
sflag='false'
files='false'
while getopts 'absf:v' flag; do
    case "${flag}" in
        a) aflag='true';;
        b) blag='true' ;;
        s) sflag='true' ;;
        f) files="${OPTARG}" ;;
        v) verbose='true';;
        *) error "Unexpected option ${flag}" ;;
    esac
done

# ======= Below this is where the error gets thrown
if "$sflag" ;
then
  echo "okay" ;
fi
# ======= end error throwing code 

echo "end" # this prints just fine

관련 정보