ปัญหาก็คือว่าในคำสั่งทุบตีทุกคนมีเพียงหนึ่งรหัสทางออก เมื่อคุณexport foo="$(false)"
รหัสทางออกของfalse
ถูกยกเลิกเพียง ถ้าคุณทำแทน
foo="$(false)"
export foo
คำสั่งแรกที่ล้มเหลวสามารถดำเนินการได้เช่นการerrexit
ตั้งค่า
การประกาศและการกำหนดสตริงตัวอักษรเช่นexport foo='bar'
ไม่ทำให้เกิดปัญหานี้ แต่การเปลี่ยนแปลงนั้นเป็นสิ่งเดียวที่คงที่ในการพัฒนาซอฟต์แวร์และมันเป็นเพียงการทำความสะอาดที่ดีในการพิสูจน์ข้อความดังกล่าวในอนาคตโดยแยกออกเป็นส่วน ๆ
foo="$(false)$(true)"
นอกเหนือไปจากคำสั่งที่ได้รับมอบหมายเฉพาะที่คุณพูดถึงนอกจากนี้ยังมีคำสั่งหลายในการกำหนดเดียวเช่น ดูpipefail
ในman bash
สำหรับอีกกับดักดังกล่าว
สิ่งที่ต้องจำก็คือลำดับของการประกาศและการมอบหมายนั้นบางครั้งเกี่ยวข้องกัน ตัวอย่างเช่นคุณต้องการประกาศตัวแปรก่อนกำหนด (น่าเสียดายที่ไม่สามารถประกาศตัวแปรได้ก่อนที่จะกำหนดเป็นครั้งแรก)local
readonly