오늘 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
비어 있지 않은 문자열입니다.