อะไรคือความแตกต่างระหว่างเครื่องหมายและอัฒภาคใน Linux Bash ?
ตัวอย่างเช่น,
$ command1 && command2
เทียบกับ
$ command1; command2
อะไรคือความแตกต่างระหว่างเครื่องหมายและอัฒภาคใน Linux Bash ?
ตัวอย่างเช่น,
$ command1 && command2
เทียบกับ
$ command1; command2
คำตอบ:
ตัว&&
ดำเนินการเป็นตัวดำเนินการบูลีน AND: หากด้านซ้ายส่งคืนสถานะการออกที่ไม่ใช่ศูนย์ตัวดำเนินการจะส่งคืนสถานะนั้นและไม่ประเมินด้านขวา (เป็นการลัดวงจร) มิฉะนั้นจะประเมินด้านขวาและส่งคืนสถานะทางออก . โดยทั่วไปจะใช้เพื่อให้แน่ใจว่าcommand2
รันcommand1
ก็ต่อเมื่อรันสำเร็จ
;
โทเค็นเพียงแค่แยกคำสั่งจึงจะเรียกใช้คำสั่งที่สองโดยไม่คำนึงถึงหรือไม่ว่าคนแรกที่ประสบความสำเร็จ
&&
แตกต่างจากแอมเพอร์แซนด์เดี่ยว&
ในแบชหรือไม่?
&
ทำให้คำสั่งทำงานอยู่เบื้องหลังใช่ "เรียกใช้สิ่งนี้ในพื้นหลัง" แตกต่างอย่างมากกับ "เรียกใช้คำสั่งถัดไปนี้เฉพาะเมื่อคำสั่งอื่นสำเร็จ"
;
ยังคงรอคำสั่งแรกที่จะจบ?
a;b
หมายถึง "วิ่งa
แล้ววิ่งb
" a&&b
หมายถึง "เรียกใช้a
แล้วรันก็b
ต่อเมื่อทำได้a
สำเร็จ"
command1 && command2
ดำเนินการcommand2
ถ้าการดำเนินการ(และเฉพาะในกรณีที่) command1
สิ้นสุดลงสำเร็จ ในศัพท์แสง Unix หมายถึงรหัสทางออก / รหัสส่งคืนเท่ากับศูนย์
command1; command2
ดำเนินการcommand2
หลังจากดำเนินการcommand1
ตามลำดับ ไม่สำคัญว่าคำสั่งนั้นจะสำเร็จหรือไม่
อดีตเป็นตรรกะง่ายๆAND
โดยใช้การประเมินการลัดวงจรคำสั่งหลังกำหนดสองคำสั่ง
สิ่งที่เกิดขึ้นจริงคือเมื่อโปรแกรมแรกส่งคืนรหัสออกที่ไม่ใช่ศูนย์ระบบAND
จะประเมินทั้งหมดFALSE
และคำสั่งที่สองจะไม่ถูกดำเนินการ หลังจากนั้นก็ประหารพวกเขาทั้งสองตามลำดับ