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