Anda sebenarnya tidak memerlukan tanda kutip di sini. Ini adalah salah satu dari sedikit kasus di mana aman untuk menggunakan variabel yang tidak dikutip. Anda dapat mengkonfirmasi ini dengan set -x:
$ var1=""
$ var2="3"
$ set -x
$ if [[ $var1 -eq $var2 ]]; then echo "match!"; else echo "no match!"; fi
+ [[ '' -eq 3 ]]
+ echo 'no match!'
no match!
$ if [[ "$var1" -eq "$var2" ]]; then echo "match!"; else echo "no match!"; fi
+ [[ '' -eq 3 ]]
+ echo 'no match!'
no match!
Seperti yang Anda lihat di atas, versi tes yang dikutip dan tidak dikutip diselesaikan dengan hal yang sama persis oleh bash. Hal yang sama harus berlaku untuk zshdan, saya pikir, shell lain yang mendukung [[ ]]operator.
Perhatikan bahwa tidak demikian halnya dengan yang lebih portabel [ ]:
$ if [ $var1 -eq $var2 ]; then echo "match!"; else echo "no match!"; fi
+ '[' -eq 3 ']'
sh: [: -eq: unary operator expected
+ echo 'no match!'
no match!
The [ ]membangun, tidak seperti [[ ]]satu, memang membutuhkan mengutip.
Beberapa tautan bermanfaat untuk mempelajari lebih lanjut tentang kapan dan mengapa mengutip diperlukan: