# touch $$
# gzip $$
# gzip --test $$.gz
# echo $?
0
# OUT=$(gzip --test $$.gz)
# echo $OUT
# if [ -z $OUT ] ; then echo $$ ; fi
26521
# if [ -n $OUT ] ; then echo $$ ; fi
26521
#
~에서bash(1)
-z string True if the length of string is zero. string -n string True if the length of string is non-zero.
혼란스러워요. 어떻게 0이 될 수 있죠?그리고동시에 0이 아닌가요? 키에 값(사용됨)이 있는지 확인하는 방법은 무엇입니까 bash
?
답변1
[ .. ]
다른 모든 명령과 동일한 규칙을 따릅니다.분사적용 가능합니다. OUT
비어 있거나 설정되지 않은 경우 $OUT
빈 인수가 아니더라도 아무 것도 확장되지 않습니다.
따라서 , 및 [ -n $OUT ]
으로 확장되어 빈 문자열이 아닌지 테스트 합니다 . 예, 테스트는 true를 반환합니다.[
-n
]
[
-n
$OUT
다른 곳과 마찬가지로 견적이 필요합니다 .
if [ -n "$OUT" ]; then ...
바라보다:언제 큰따옴표가 필요합니까? 그리고테스트 및 조건BashGuide에서.
답변2
주문하다
[ -z $OUT ]
정확히 같다
test -z $OUT
비어 있으면 $OUT
다음과 같습니다.
test -z
행동test
매개변수 개수에 따라 다름명령줄에 제공됩니다. test -n
or와 같이 단일 인수만 주어지고 test -z
해당 인수의 길이(문자열로 해석될 때)가 0이 아닌 경우 결과는 "true"입니다.
즉, $OUT
비어 있고 따옴표가 없으면 및 둘 다 길이가 0이 아닌 문자열이기 때문에 둘 다 참 이 test -z $OUT
됩니다 test -n $OUT
.-z
-n
이 문제를 해결하려면 변수 확장을 큰따옴표로 묶으십시오.
[ -n "$OUT" ]
당신은 또한 볼 수 있습니다