2
พฤติกรรมของ "eval" ภายใต้ "set -e" ในการแสดงออกตามเงื่อนไข
พิจารณาคำสั่ง eval false || echo ok echo also ok ปกติเราจะคาดหวังนี้จะดำเนินการfalseสาธารณูปโภคและเนื่องจากสถานะออกเป็นที่ไม่ใช่ศูนย์ไปแล้วดำเนินการและecho okecho also ok ในทุก POSIX เหมือนเปลือกหอยที่ผมใช้ ( ksh93, zsh, bash, dash, OpenBSD kshและyash) นี้เป็นสิ่งที่เกิดขึ้น set -eแต่สิ่งที่ได้รับที่น่าสนใจถ้าเราเปิดใช้งาน หากset -eมีผล OpenBSD ของshและkshเปลือกหอย (มาทั้งจากpdksh) evalจะยุติสคริปต์เมื่อการดำเนินการ ไม่มีเปลือกอื่นทำ POSIX บอกว่าข้อผิดพลาดในยูทิลิตี้บิวด์อินพิเศษ (เช่นeval) ควรทำให้เชลล์ที่ไม่มีการโต้ตอบหยุดทำงาน ฉันไม่แน่ใจทั้งหมดว่าการดำเนินการfalseถือเป็น "ข้อผิดพลาด" (ถ้าเป็นเช่นนั้นจะเป็นอิสระจากset -eการใช้งาน) วิธีแก้ปัญหานี้ดูเหมือนว่าจะใส่ไว้evalในเปลือกย่อย ( eval false ) || echo ok echo …