คุณไม่จำเป็นต้องใส่เครื่องหมายคำพูดที่นี่ นี่เป็นหนึ่งในไม่กี่กรณีที่ปลอดภัยที่จะใช้ตัวแปรที่ไม่มีเครื่องหมาย คุณสามารถยืนยันสิ่งนี้ด้วย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!
ตามที่คุณเห็นด้านบนการทดสอบที่ยกมาและไม่มีการอ้างอิงจะได้รับการแก้ไขในสิ่งเดียวกันโดยการทุบตี แบบเดียวกันควรจะเป็นจริงสำหรับzsh
และฉันคิดว่าเปลือกอื่น ๆ ที่สนับสนุน[[ ]]
ผู้ประกอบการ
โปรดทราบว่านี่ไม่ใช่กรณีที่พกพาได้มากกว่า[ ]
:
$ if [ $var1 -eq $var2 ]; then echo "match!"; else echo "no match!"; fi
+ '[' -eq 3 ']'
sh: [: -eq: unary operator expected
+ echo 'no match!'
no match!
การ[ ]
สร้างซึ่งแตกต่างจากการก่อสร้าง[[ ]]
จะต้องมีการอ้างอิง
ลิงก์ที่มีประโยชน์บางอย่างเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเวลาและเหตุผลที่ต้องมีการอ้างข้อความ