이것은 쉘 (bash, dash) 프롬프트에서 작동합니다.
[ -z "" ] && echo A || echo B
A
그러나 POSIX 쉘 스크립트 를 작성하려고하는데 다음과 같이 시작됩니다.
#!/bin/sh
[ "${#}" -eq 1 ] || echo "Invalid number of arguments, expected one."; exit 1
readonly raw_input_string=${1}
[ -z "${raw_input_string}" ] && echo "The given argument is empty."; exit 1
그리고 나는 왜 그런지 모르겠지만 메시지를받지 못했습니다 .
주어진 인수가 비어 있습니다.
다음과 같이 스크립트를 호출하면
./test_empty_argument ""
왜 그런 겁니까?
5
참조 변수가 비어 있거나 공백이 포함 된 경우 내가 테스트 할 수 있습니까? 변수가 비어 있거나 설정되지 않았거나 공백 만 포함되어 있는지 테스트하는 방법 이 질문의 문제는 그와 아무 관련이 없습니다.
—
ilkkachu
그냥 사용하십시오
—
user2497
if [ X”” = X”$var” ] ; then echo isempty ; fi
@ user2497 지난 20 년 동안 릴리스 된 쉘에서 사용할 이유가 없습니다. 그것은 오래되고 버그가 많은 껍질에 대한 해결 방법입니다.
—
chepner
@ chepner 그래서 유효한 솔루션이 아니십니까? 다른 것을 사용해야합니까?
—
user2497
[ "" = "$var" ]
잘 작동합니다. 인용 된 빈 문자열은의 인수 목록에서 제거되지 않습니다 [
. 그러나 그것은 [ -z "$var" ]
또한 잘 작동 하기 때문에 필요하지 않습니다 .