[[ $variable ]]와 [[ -n $variable ]]의 차이점은 무엇입니까?

[[ $variable ]]와 [[ -n $variable ]]의 차이점은 무엇입니까?

bash에서는 [[ $variable ]][[ -n $variable ]]정확히 동일합니까? 아래 출력의 경우인 것 같지만 쉘 스크립트에서는 두 가지 사용 형태가 모두 널리 사용되는 것으로 나타났습니다.

$ z="abra"
$ [[ $z ]]
$ echo $?
0
$ [[ -n $z ]]
$ echo $?
0
$ z=""
$ [[ $z ]]
$ echo $?
1
$ [[ -n $z ]]
$ echo $?
1
$ unset z
$ [[ $z ]]
$ echo $?
1
$ [[ -n $z ]]
$ echo $?
1

답변1

[ "$var" ][ -n "$var" ]현재 bash 및 대부분의 쉘 과 동일합니다 . 다른 오래된 쉘에서는 동일하지만다양한 오류로 고통받다예를 들어 "$var"의 일부 특수 값의 경우 =또는 .(!

더욱 선명하게 발견한 것은 [ -n "$var" ]펜던트였습니다 [ -z "$var" ].

[[ -n $var ]][[ $var ]]비표준 ksh 구문을 구현하는 모든 쉘과 동일합니다.

test "x$var" != x아주 오래된 쉘로 포팅하려는 경우 가장 신뢰할 수 있는 방법입니다.

답변2

~에 따르면Bash에서 길이가 0이 아닌 문자열을 테스트합니다. [ -n “$var” ] 또는 [ “$var” ], 예, 동일합니다.

변수 이름을 인용하더라도 동일합니다.

중요 사항: 제가 인용한 질문 이름은 에만 언급되어 있지만 답변은 두 가지를 모두 [고려한 것입니다 .[[[

관련 정보