ผมปกติใช้;ในการรวมคำสั่งมากกว่าหนึ่งในสาย &&แต่บางคนชอบ มีความแตกต่างกันหรือไม่? ตัวอย่างเช่นcd ~; cd -และcd ~ && cd -ดูเหมือนว่าจะทำสิ่งเดียวกัน รุ่นใดพกพาสะดวกกว่าเช่นจะรองรับ bash-subset เช่นเปลือกของ Android หรือไม่
ผมปกติใช้;ในการรวมคำสั่งมากกว่าหนึ่งในสาย &&แต่บางคนชอบ มีความแตกต่างกันหรือไม่? ตัวอย่างเช่นcd ~; cd -และcd ~ && cd -ดูเหมือนว่าจะทำสิ่งเดียวกัน รุ่นใดพกพาสะดวกกว่าเช่นจะรองรับ bash-subset เช่นเปลือกของ Android หรือไม่
คำตอบ:
หากคำสั่งก่อนหน้าล้มเหลวด้วยคำสั่ง;ที่สองจะทำงาน
แต่ด้วย&&ครั้งที่สองจะไม่ทำงาน
นี่คือตัวถูกดำเนินการ "และ" ตรรกะ "ขี้เกียจ" ระหว่างการดำเนินการ
;หนึ่งหรือ&&หนึ่ง? หรือคุณหมายถึงทั้งสองอย่าง?
                    &&.
                    ฉันใช้งาน&&เนื่องจากคอมพิวเตอร์ที่อยู่ใกล้เคียงมานานแล้ว
root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...   
^C
แต่ไม่ได้ช่วย ... ;)
cd /tnp/test && rm -rf * มีความปลอดภัย... ;)
rm -rf /tnp/test
                    rm /tnp/test/ -rfเพื่อป้องกันการเข้าสู่ missclick ที่เป็นอันตราย
                    ในcmd1 && cmd2, cmd2จะดำเนินการเฉพาะในกรณีที่cmd1ประสบความสำเร็จ (ผลตอบแทน 0)
ในcmd1 ; cmd2, cmd2จะถูกดำเนินการในกรณีใด ๆ
โครงสร้างทั้งสองเป็นส่วนหนึ่งของเชลล์ที่เข้ากันได้กับ POSIX
&&หมายถึงดำเนินการคำสั่งถัดไปหากออกก่อนหน้าด้วยสถานะ 0 สำหรับตรงกันข้ามใช้||ie เพื่อดำเนินการหากคำสั่งก่อนหน้าออกโดยมีสถานะไม่เท่ากับ 0;ดำเนินการเสมอ
มีประโยชน์มากเมื่อคุณต้องดำเนินการบางอย่างขึ้นอยู่กับว่าคำสั่งก่อนหน้านี้เสร็จสิ้นตกลงหรือไม่
คำสั่งที่แยกจากกัน;จะดำเนินการตามลำดับโดยไม่คำนึงถึงสถานะความสมบูรณ์
ด้วย&&คำสั่งที่สองจะดำเนินการต่อเมื่อคำสั่งแรกดำเนินการสำเร็จ (ส่งคืนสถานะการออกเป็น 0)
สิ่งนี้ครอบคลุมอยู่ใน manpage bash ด้านListsล่าง ฉันคาดหวังว่าเชลล์ที่เหมือน Unix จะรองรับโอเปอเรเตอร์ทั้งสองนี้ แต่ฉันไม่รู้เฉพาะเกี่ยวกับเชลล์ Android
&&อนุญาตให้ดำเนินการตามเงื่อนไขในขณะที่;มีการเรียกใช้คำสั่งที่สองเสมอ
ในเช่นcommand1 && command2, command2จะดำเนินการเมื่อcommand1ได้สิ้นสุดลงด้วยexit 0การส่งสัญญาณทั้งหมดไปได้ด้วยดีขณะที่อยู่ในคำสั่งที่สองจะถูกดำเนินการไม่ว่าผลที่ได้จากการcommand1 ; command2command1
&& เป็นตรรกะและในการทุบตี Bash มีการประเมินการลัดวงจรของตรรกะ AND สำนวนนี้เป็นวิธีที่ง่ายกว่าในการแสดงสิ่งต่อไปนี้:
cmd1;rc=$?
if [ $rc -eq 0 ]; then
   cmd2
fi
ในขณะที่; เวอร์ชันเป็นเพียง:
cmd1
cmd2