Dalam bash, apakah [[ $variable ]]
dan [[ -n $variable ]]
sepenuhnya sama? Tampaknya menjadi kasus dilihat dari output di bawah ini, tapi saya melihat kedua bentuk penggunaan lazim dalam skrip shell.
$ 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
[[ -n $(echo -ne "\0") ]]; echo $?
dan[ -n $(echo -ne "\0") ]; echo $?
berbeda[ -n ]
sama saja[ -n -n ]
. Dalam shell selain zsh, argumen command (even builtin) atau variabel shell tidak dapat berisi karakter NUL.Jawaban:
[ "$var" ]
setara dengan[ -n "$var" ]
di bash dan sebagian besar shell saat ini. Di shell yang lebih lama, mereka seharusnya setara, tetapi menderita bug yang berbeda untuk beberapa nilai khusus seperti "$ var"=
,(
atau!
.Saya menemukan
[ -n "$var" ]
lebih terbaca dan liontin[ -z "$var" ]
.[[ -n $var ]]
sama dengan[[ $var ]]
di semua shell di mana sintaks ksh non-standar diimplementasikan.test "x$var" != x
akan menjadi yang paling andal jika Anda ingin portable ke cangkang yang sangat tua.sumber
Menurut Test untuk string panjang non-nol di bash: [-n "$ var"] atau ["$ var"] , ya, mereka setara.
Mereka setara bahkan mengutip nama variabel.
Penting untuk diperhatikan : nama pertanyaan yang saya kutip merujuk hanya untuk
[
, tetapi jawabannya mempertimbangkan keduanya[
dan[[
.sumber
[[]]
tidak setara dengan[]
:)