ในbash
ทุกตัวแปรนั้นเป็นสตริง (หรืออาร์เรย์หรือฟังก์ชั่น แต่มาพูดถึงตัวแปรปกติที่นี่)
เงื่อนไขถูกแยกวิเคราะห์ตามค่าส่งคืนของคำสั่งทดสอบ - ค่าส่งคืนไม่ใช่ตัวแปรเป็นสถานะออก เมื่อคุณประเมินif [ ... ]
หรือif [[ ]]
หรือif grep something
หรืออะไรทำนองนั้นค่าส่งคืน 0 (ไม่ใช่สตริง 0 แต่ออกจากสถานะ 0 = สำเร็จ) หมายถึงจริงและส่วนที่เหลือหมายถึงเท็จ (ดังนั้นตรงกันข้ามกับสิ่งที่คุณคุ้นเคยกับในภาษาโปรแกรมที่คอมไพล์แล้ว แต่เนื่องจากมีวิธีหนึ่งที่จะประสบความสำเร็จและหลายวิธีที่จะล้มเหลวและผลลัพธ์ที่คาดหวังจากการดำเนินการมักจะสำเร็จ 0 จึงถูกใช้เป็นผลลัพธ์เริ่มต้นทั่วไปหากไม่มีสิ่งใดผิดพลาด) สิ่งนี้มีประโยชน์มากเพราะสามารถใช้ไบนารี่ใดก็ได้เป็นแบบทดสอบ - ถ้ามันล้มเหลวมันเป็นเท็จมิฉะนั้นก็เป็นจริง
true
และfalse
โปรแกรม (มักถูกแทนที่ด้วย builtins) เป็นเพียงโปรแกรมเล็ก ๆ ที่ไม่ทำอะไรเลย - ไม่true
ประสบความสำเร็จในการทำอะไรเลยและจบด้วย 0 ในขณะที่false
พยายามทำอะไรและ "ล้มเหลว" ออกด้วย 1 ฟังดูไม่มีประโยชน์
สำหรับวิธีการส่งผ่านความจริงโดยรอบมันขึ้นอยู่กับคุณ เป็นเรื่องปกติที่จะใช้ "y" หรือ "ใช่" เพื่อความจริงและการใช้งานif [ x"$variable" = x"yes" ]
(ต่อท้ายสตริงดัมมี่x
เพราะหาก$variable
เกิดขึ้นจะมีความยาวเป็นศูนย์สิ่งนี้จะป้องกันการสร้างคำสั่งปลอมif [ = "yes" ]
ที่ไม่แยกวิเคราะห์) นอกจากนี้ยังอาจเป็นประโยชน์ในการใช้สตริงว่างเปล่าเป็นเท็จและใช้[ -z "$variable ]
เพื่อทดสอบว่ามันมีความยาวเป็นศูนย์หรือไม่หรือ-n
ไม่ใช่ศูนย์
อย่างไรก็ตามมันค่อนข้างยากที่จะต้องผ่านค่าบูลีนในbash
- มันเป็นเรื่องธรรมดามากที่จะเกิดexit
ความล้มเหลวหรือส่งคืนผลลัพธ์ที่เป็นประโยชน์ (หรือเป็นศูนย์ถ้ามีอะไรผิดพลาดและทดสอบสตริงว่าง) และกรณีส่วนใหญ่สามารถ ทดสอบความล้มเหลวโดยตรงจาก statatus ทางออก
ในกรณีของคุณคุณต้องการฟังก์ชั่นที่จะทำหน้าที่เป็นคำสั่งอื่น ๆ (ดังนั้นกลับ 0 เมื่อประสบความสำเร็จ) ดังนั้นตัวเลือกสุดท้ายของคุณดูเหมือนจะเป็นทางเลือกที่ถูกต้อง
นอกจากนี้คุณอาจไม่จำเป็นต้องมีreturn
คำสั่ง หากฟังก์ชั่นนั้นง่ายเพียงพอคุณสามารถใช้ความจริงที่ว่ามันคืนค่าสถานะของคำสั่งที่ดำเนินการครั้งสุดท้ายในฟังก์ชั่น ดังนั้นฟังก์ชั่นของคุณก็เป็นได้
drive_xyz_available() {
[ -e /dev/disk/by-uuid/whatever ]
}
หากคุณกำลังทดสอบว่ามีโหนดอุปกรณ์อยู่ (หรือ grep /proc/mounts
เพื่อตรวจสอบว่ามีการติดตั้งอยู่หรือไม่)
help true ; help false ; help exit