[ "$1" = "" ]
และ[ -z "$1" ]
เทียบเท่าใน bash และเชลล์ที่สอดคล้องกับ POSIX อื่น ๆ (โปรดทราบว่าจะต้องมีช่องว่างในแต่ละด้านของวงเล็บยกเว้นว่ามีอักขระที่ไม่ใช่คำที่เป็นองค์ประกอบเช่น;
)
[
เป็นเปลือกในตัวเหมือนคนอื่น ๆ ; ในความเป็นจริงมันสามารถสะกดได้test
(ความแตกต่างเพียงอย่างเดียวระหว่างสองคือ[
ต้องใช้]
เป็นอาร์กิวเมนต์สุดท้าย) ดังนั้นถ้าคุณทำงาน[ "$1" = "" ]
กับ$1
การขยายไปยัง-z
ผู้ประกอบการทดสอบเห็นสามข้อโต้แย้ง: -z
, =
และสตริงที่ว่างเปล่า เชลล์Bourne ที่มีอายุมากกว่าบางครั้งโยนข้อผิดพลาดในการแยกวิเคราะห์เมื่อตัวถูกดำเนินการดูเหมือนตัวดำเนินการในลักษณะนี้แม้ว่าจะไม่มีความคลุมเครือในการแสดงออกที่สมบูรณ์ ฉันไม่รู้ว่าจริง ๆ แล้วเวอร์ชันใดมีปัญหากับการแสดงออกเฉพาะนี้หรือไม่ แต่การแสดงออกที่ซับซ้อนมากขึ้นอาจทำให้พวกเขาทิ้งไป อาจมีรุ่นที่มีปัญหากับคำที่ว่างเปล่า สิ่งเหล่านี้จะไม่ได้รับการสนับสนุน[ -z "$1" ]
เช่นกัน สำนวนเชลล์ทั่วไปคือ[ x"$1" = x"" ]
. มันหลีกเลี่ยงความเสี่ยงใด ๆ ของการถูกดำเนินการแจงเป็นตัวดำเนินการเนื่องจากไม่มีตัวดำเนินการเริ่มต้นด้วยตัวอักษร
ใน ksh, bash และ zsh คุณสามารถใช้ไวยากรณ์วงเล็บคู่[[ -z $1 ]]
ได้ ไวยากรณ์ที่ใหม่กว่านี้ (มาจากช่วงปลายทศวรรษที่ 1980 แทนที่จะเป็นช่วงกลางทศวรรษ 1970) ช่วยลดความเสี่ยงในการถูกดำเนินการแยกวิเคราะห์เป็นตัวดำเนินการโดยใช้โครงสร้างประโยคแบบพิเศษมากกว่าแบบธรรมดาทั่วไป ตัวดำเนินการต้องปรากฏตามตัวอักษรไม่ต้องใส่เครื่องหมายคำพูดในวงเล็บคู่และคุณไม่จำเป็นต้องเพิ่มเครื่องหมายคำพูดซ้ำเพื่อขยาย