(Bash trả lời cụ thể) Bash không có khái niệm về ngoại lệ. Tuy nhiên, với set -o errexit (hoặc tương đương: set -e) ở mức ngoài cùng, lệnh không thành công sẽ dẫn đến việc thoát khỏi subshell với trạng thái thoát khác không. Nếu đây là một tập hợp các chuỗi con được lồng mà không có điều kiện xung quanh việc thực thi các chuỗi con đó, thì nó sẽ "cuộn" toàn bộ tập lệnh và thoát một cách hiệu quả.
Điều này có thể khó khăn khi cố gắng đưa các bit của mã bash khác nhau vào một tập lệnh lớn hơn. Một khối bash có thể tự hoạt động tốt, nhưng khi được thực hiện theo errexit (hoặc không có errexit), hãy hành xử theo những cách không ngờ tới.
[192.168.13.16 (f0f5e19e) ~ 22:58:22] # bash -o errexit / tmp / foo
đã xảy ra lỗi
[192.168.13.16 (f0f5e19e) ~ 22:58:31] # bash / tmp / foo
đã xảy ra lỗi
Nhưng dù sao chúng tôi cũng đến đây
[192.168.13.16 (f0f5e19e) ~ 22:58:37] # mèo / tmp / foo
#! / bin / bash
dừng lại () {
tiếng vang "$ {1}"
thoát 1
}
nếu sai; sau đó
tiếng vang "foo"
khác
(
dừng lại "một cái gì đó đã đi sai"
)
echo "Nhưng chúng tôi đã đến đây bằng mọi cách"
fi
[192.168.13.16 (f0f5e19e) ~ 22:58:40] #