Các vấn đề là trong Bash mỗi lệnh chỉ có một mã thoát. Khi bạn export foo="$(false)"
mã thoát false
chỉ đơn giản là bị loại bỏ. Nếu bạn thay
foo="$(false)"
export foo
lệnh đầu tiên không thành công có thể được thực hiện, ví dụ như errexit
cài đặt.
Khai báo và gán một chuỗi ký tự như export foo='bar'
tất nhiên không gặp phải vấn đề này. Nhưng thay đổi là hằng số duy nhất trong phát triển phần mềm và đơn giản là việc quản lý tốt để chứng minh những tuyên bố như vậy trong tương lai bằng cách tách chúng ra.
Ngoài các lệnh cụ thể của nhiệm vụ mà bạn đề cập, còn có nhiều lệnh trong một nhiệm vụ đơn lẻ như foo="$(false)$(true)"
. Xem pipefail
trong man bash
cho một cái bẫy khác như vậy.
Một điều cần nhớ là trình tự khai báo và chuyển nhượng đôi khi có liên quan. Ví dụ: bạn sẽ muốn khai báo các biến trước khi gán chúng. (Thật không may, không thể khai báo các biến trước khi gán chúng lần đầu tiên.)local
readonly