ไพรเมอร์บูลีนด่วนสำหรับ Bash
if
คำสั่งคำสั่งจะใช้เวลาเป็นอาร์กิวเมนต์ (เช่นการทำ&&
, ||
ฯลฯ ) โค้ดผลลัพธ์จำนวนเต็มของคำสั่งถูกตีความเป็นบูลีน (0 / null = true, 1 / else = false)
test
คำสั่งจะใช้เวลาดำเนินการและถูกดำเนินการเป็นข้อโต้แย้งif
และส่งกลับรหัสผลในรูปแบบเดียวกับ นามแฝงของtest
คำสั่งคือ[
ซึ่งมักจะใช้กับif
เพื่อทำการเปรียบเทียบที่ซับซ้อนมากขึ้น
true
และfalse
งบทำอะไรและกลับรหัสผล (0 และ 1 ตามลำดับ) ดังนั้นพวกเขาสามารถใช้เป็นตัวอักษรแบบบูลใน Bash แต่ถ้าคุณใส่คำแถลงไว้ในที่ที่ตีความว่าเป็นสตริงคุณจะพบปัญหา ในกรณีของคุณ:
if [ foo ]; then ... # "if the string 'foo' is non-empty, return true"
if foo; then ... # "if the command foo succeeds, return true"
ดังนั้น:
if [ true ] ; then echo "This text will always appear." ; fi;
if [ false ] ; then echo "This text will always appear." ; fi;
if true ; then echo "This text will always appear." ; fi;
if false ; then echo "This text will never appear." ; fi;
นี้จะคล้ายกับการทำสิ่งที่ชอบกับecho '$foo'
echo "$foo"
เมื่อใช้test
คำสั่งผลลัพธ์จะขึ้นอยู่กับตัวดำเนินการที่ใช้
if [ "$foo" = "$bar" ] # true if the string values of $foo and $bar are equal
if [ "$foo" -eq "$bar" ] # true if the integer values of $foo and $bar are equal
if [ -f "$foo" ] # true if $foo is a file that exists (by path)
if [ "$foo" ] # true if $foo evaluates to a non-empty string
if foo # true if foo, as a command/subroutine,
# evaluates to true/success (returns 0 or null)
กล่าวโดยย่อหากคุณต้องการทดสอบสิ่งที่ผ่าน / ไม่ผ่าน (หรือที่เรียกว่า "จริง" / "เท็จ") ให้ส่งคำสั่งไปยังคำสั่งของคุณif
หรือ&&
อื่น ๆ โดยไม่ต้องใส่เครื่องหมายวงเล็บ สำหรับการเปรียบเทียบที่ซับซ้อนให้ใช้วงเล็บกับตัวดำเนินการที่เหมาะสม
และใช่ฉันรู้ว่าไม่มีสิ่งเช่น boolean ประเภทดั้งเดิมใน Bash และนั่นif
และ[
และtrue
เป็น "คำสั่ง" ทางเทคนิคและไม่ใช่ "คำสั่ง" นี่เป็นเพียงคำอธิบายพื้นฐานที่ใช้งานได้ดีมาก