bash 테스트 bultin 후 공간이 누락되었습니다 - 올바른 구문이거나 정의되지 않았습니까?

bash 테스트 bultin 후 공간이 누락되었습니다 - 올바른 구문이거나 정의되지 않았습니까?

오늘 bash 스크립트를 작성하는 동안 작은 실수를 했습니다. 아래 코드

#!/bin/bash

if [ -n "${UNDEFINED_VAR}"]; then
   echo 'string not empty'
   echo "$UNDEFINED_VAR"
else
   echo 'string empty'
fi

반환 string not empty및 빈 줄. 자세히 살펴보면 ]위의 코드 앞에 공백이 누락되어 있음을 알 수 있습니다. 놀랍게도 bash는 unexpected token구문 오류 없이 내 코드를 행복하게 실행했습니다. 여백 메모는 [[대문자 사용 시 올바른 문법 오류를 제공합니다.

내 질문:내가 합법적인 구문을 사용하지 않고 bash가 원하는 것은 무엇이든 자유롭게 수행할 수 있기 때문에 이것이 정의되지 않은 동작인가요? 아니면 매우 예상치 못한 결과를 제공하는 정말 이상한 법적 구문인가요?

답변1

설정되지 않은 경우 UNDEFINED_VAR명령은

[ -n "${UNDEFINED_VAR}"]

으로 확장될 예정입니다.

[ -n ]

-n문자열이 비어 있지 않기 때문에 이는 잘 정의되어 있으며 true입니다 .

[단일 인수(무시됨)에 대해 수행되는 기본 테스트 ]는 비어 있지 않은 문자열을 테스트하는 것입니다. 문자열은 -n비어 있지 않은 문자열입니다.

관련 정보