ฉันประหลาดใจเสมอที่ในโฟลเดอร์/bin
มี[
โปรแกรม
นี่คือสิ่งที่เรียกว่าเมื่อเรากำลังทำอะไรเช่น: if [ something ]
?
โดยการเรียก[
โปรแกรมอย่างชัดเจนในเชลล์มันจะถามหาที่สอดคล้องกัน]
และเมื่อฉันให้วงเล็บปิดมันดูเหมือนจะไม่ทำอะไรเลยไม่ว่าฉันจะแทรกอะไรระหว่างวงเล็บ
จำเป็นต้องพูดทางปกติเกี่ยวกับการให้ความช่วยเหลือเกี่ยวกับโปรแกรมไม่ทำงานเช่นค่าman [
มิได้[ --help
งาน
man '['
ทำงานได้ดีสำหรับฉัน - ไม่ว่าคุณจะลืมพูด[
หรือคุณมีคำจำกัดความที่แตกต่างกันของ "งาน"
[
ประเมินอาร์กิวเมนต์ของมันดังนั้นคุณต้องมีช่องว่างระหว่างทั้งหมด [ a=b ]
ไม่ใช่การเปรียบเทียบ: มันจะเป็นจริงเสมอ (เป็นสตริงเดียว: "a = b" ซึ่งประเมินเสมอเป็นจริง ) และคุณควร จำกัด จำนวนอาร์กิวเมนต์เป็น 4 (แม้ว่าการใช้งานล่าสุดจะอนุญาตมากกว่านี้ .. . การ จำกัด ที่ 4 ทำให้พกพาได้มากกว่าตัวอย่างเช่น: [ "a" = "b" ]
มีอาร์กิวเมนต์ 4 ข้อแล้ว: "a" "=" "b" และสิ้นสุดการทดสอบที่ไม่จำเป็น ARG: "]") หากคุณต้องการข้อมูลเพิ่มเติม: ทดสอบลูกโซ่ด้วย:if [ "$Var_a" = "foo" ] && [ "$Var_b" = "bar" ] ; then : do something ; fi
!
ด้วยตัวเอง (unescaped และ unquoted) จะไม่ถูกแทนที่และดียิ่งขึ้นกว่าif ! [ ...
นี้ การขยายตัวของ bash ทั้งหมดที่ใช้!
รวมถึงตัวละครอื่นเป็นอย่างน้อย
[
-builtin ในbash
(และอาจจะเปลือกหอยอื่น ๆ เช่นกัน) /bin/[
และว่าเรื่องนี้อาจนำมาใช้แทน นอกจากนี้ยังมีtest
- คำสั่งซึ่งในหลาย ๆ ระบบเป็นลิงก์สัญลักษณ์ไปยัง/bin/[
(หรือกลับกัน) - แต่สำหรับคนอื่น ๆ เป็นคำสั่งแยกต่างหาก
[
อ้างถึงtest
คำสั่งแม้ว่าไม่expr
ควรดังนั้นman test