ผมปกติใช้;
ในการรวมคำสั่งมากกว่าหนึ่งในสาย &&
แต่บางคนชอบ มีความแตกต่างกันหรือไม่? ตัวอย่างเช่น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 ; command2
command1
&& เป็นตรรกะและในการทุบตี Bash มีการประเมินการลัดวงจรของตรรกะ AND สำนวนนี้เป็นวิธีที่ง่ายกว่าในการแสดงสิ่งต่อไปนี้:
cmd1;rc=$?
if [ $rc -eq 0 ]; then
cmd2
fi
ในขณะที่; เวอร์ชันเป็นเพียง:
cmd1
cmd2