อะไรคือความแตกต่างระหว่างเครื่องหมายและอัฒภาคใน 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และคำสั่งที่สองจะไม่ถูกดำเนินการ หลังจากนั้นก็ประหารพวกเขาทั้งสองตามลำดับ