빈 테스트 처리

빈 테스트 처리

저는 bash를 배우고 있는데 이 코드 줄이 어떻게 작동하는지(왜) 혼란스럽습니다 if [$1 = ]; then. 누군가 이것을 설명할 수 있나요?

Bash 튜토리얼에서여기아래에파일 이름 바꾸기(여섯 번째 블록)

# a quick check to see if any files were given
# if none then it's better not to do anything than rename some non-existent
# files!!

if [$1 = ]; then
    echo "no files given"
    exit 0
fi

답변1

이 코드는 잘못되었습니다. 인수가 특수 문자가 아니기 때문에 비어 있지 않고(공백으로 시작하지 않는 경우) 별도의 단어가 아닌 경우(인식으로 사용되지 않는 경우에도[ ) 작동하지 않습니다. [[명령.

set -x쉘이 보는 것을 보여주기 위해:

set -x
[$1 = ]
    + '[' = ']'

[]이 경우 와 사이에 문자열이 있으므로 테스트는 true입니다 =.

null이 아닌 매개변수에 대한 테스트는 다음과 같이 수행되어야 합니다.

[ -n "$1" ] ; echo $?
    + '[' -n '' ']'
    + echo 1

또는

[ -z "$1" ] ; echo $?
    + '[' -z '' ']'
    + echo 0

대신에

관련 정보