ไฟล์ไบนารีที่น่าสนใจในระบบ Unix
- ในระบบ Unix มีไฟล์ไบนารีที่มีชื่อเป็นสัญลักษณ์เดี่ยวอยู่
- หากรันคำสั่ง
/bin/[จะพบว่าเป็นโปรแกรมที่ชื่อว่า[ [และtestชี้ไปยังไฟล์ไบนารีเดียวกัน และทั้งสองคำสั่งก็ทำงานเดียวกันจริง ๆ
การใช้งานโปรแกรม test และ [
- โปรแกรม
testใช้สำหรับประเมินนิพจน์ในเชลล์ - ใช้สำหรับการเปรียบเทียบสตริง การเปรียบเทียบตัวเลข การตรวจสอบเงื่อนไขของไฟล์ เป็นต้น
testรับอาร์กิวเมนต์เพื่อนำมาประเมินนิพจน์ และจะคืนค่า 0 ถ้าเป็นจริง และ 1 ถ้าเป็นเท็จ
เหตุผลที่มีสองคำสั่งนี้อยู่
- เหตุผลที่มีทั้ง
testและ[ยังไม่ชัดเจน แต่คาดว่าเพื่อช่วยให้อ่านโค้ดได้ง่ายขึ้น - การใช้คำสั่ง
[ทำให้เขียนเงื่อนไขได้ดูสะอาดกว่าtest - เมื่อใช้
[อาร์กิวเมนต์สุดท้ายของคำสั่งต้องลงท้ายด้วย]
ความแตกต่างระหว่างคำสั่ง built-in กับไฟล์ไบนารีภายนอก
- เนื่องจาก
testและ[ถูกใช้บ่อยในเชลล์สคริปต์ จึงถูกทำเป็นคำสั่ง built-in ในเชลล์ส่วนใหญ่ - การใช้ built-in กับไฟล์ไบนารีภายนอกอาจแสดงพฤติกรรมต่างกัน และความแตกต่างนี้ก็อาจขึ้นอยู่กับเชลล์ที่ใช้ด้วย
การใช้ [[ และความแตกต่าง
[[เป็นส่วนขยายของ Bash ที่ใช้แทนการใช้งาน[[[เป็นคำสั่ง built-in ที่สามารถเปลี่ยนกฎพื้นฐานของภาษาได้ภายในนิพจน์[[อาจให้ผลลัพธ์ต่างออกไป เพราะในการเปรียบเทียบสตริง มันปฏิบัติต่อ glob pattern แบบ literal
การเลือกใช้เมื่อเขียนเชลล์สคริปต์
- หากต้องการเขียนเชลล์สคริปต์ที่พกพาได้ ควรใช้
[ - หากเขียนสคริปต์ที่ใช้เฉพาะ Bash การใช้
[[จะให้ความสามารถมากกว่า
การรวม shell expression กับ test expression
- เชลล์มีนิพจน์ของตัวเองผ่านโอเปอเรเตอร์
!,&&,|| - สามารถรวม
testexpression และ shell expression ให้เป็นคำสั่งเดียวได้
ความเห็นของ GN⁺
ประเด็นสำคัญที่สุดของบทความนี้คือ ในระบบ Unix นั้น [ และ test มีอยู่ในฐานะสองคำสั่งที่ต่างชื่อกันแต่ทำงานเหมือนกัน ซึ่งคาดว่าเป็นไปเพื่อเพิ่มทั้งความอ่านง่ายและประสิทธิภาพในการเขียนเชลล์สคริปต์ ข้อมูลนี้มีประโยชน์สำหรับวิศวกรซอฟต์แวร์ระดับเริ่มต้นที่ต้องเขียนหรือทำความเข้าใจเชลล์สคริปต์ และยังช่วยให้เข้าใจหลักการทำงานของเชลล์สคริปต์รวมถึงความแตกต่างระหว่างเชลล์แต่ละแบบได้ดีขึ้น เหตุผลที่บทความนี้น่าสนใจก็คือ มันแสดงให้เห็นว่าเครื่องมือพื้นฐานของเชลล์สคริปต์สามารถถูกใช้งานได้หลากหลายรูปแบบอย่างไร และสะท้อนให้เห็นทั้งความซับซ้อนและความยืดหยุ่นของการเขียนโปรแกรมเชลล์ได้เป็นอย่างดี
1 ความคิดเห็น
ความเห็นจาก Hacker News
คำขอบคุณจากผู้เขียนต้นฉบับและข้อเสนอให้แก้ชื่อเรื่อง
ประวัติของคำสั่ง "test" ใน Bourne shell และความชอบส่วนตัว
ตัวอย่างเงื่อนไขที่ไม่ใช้บล็อก
ifวิธีใช้บล็อก
ifร่วมกับคำสั่งทั่วไปข้อกังวลเกี่ยวกับการใช้ตัวดำเนินการตรรกะในคำสั่ง
testข้อดีของการใช้คำสั่ง "test" และความสะดวกของ "man test"
ข้อควรระวังเกี่ยวกับพฤติกรรมของ
[และtestเมื่อมีอาร์กิวเมนต์เดียวความแตกต่างของ
/bin/[และ/bin/testบน Linux และ NetBSDแชร์ลิงก์บล็อกสำหรับศึกษา
test/[/[[ให้ลึกขึ้น และจุดแปลก ๆ ของ shellชี้ว่า
[[เป็นคำสั่งเฉพาะของ bash และแนะนำให้ใช้เมื่อมั่นใจว่าใช้ bashความสับสนต่อการรับรู้ว่า
[ไม่ได้เป็นส่วนหนึ่งของภาษา bash scriptingความเห็นที่ชัดเจนต่อ shell และการคัดค้านการใช้
[