zsh không hoàn toàn tương thích bash. Có nhiều sự khác biệt. Zsh mới tương thích hơn với bash (= ~ được hỗ trợ, hiện tại exec có thêm tùy chọn cờ, v.v.) nhưng khả năng tương thích hoàn toàn không phải là mục tiêu, thậm chí không được "mô phỏng".
Chẳng hạn, chuỗi con bash là $ {foo: offset: len} nhưng trong zsh, nó là $ foo [bắt đầu, kết thúc] và đó chỉ là một ví dụ đơn giản.
zsh là một vỏ ảnh hưởng tcsh và ksh, thực hiện nhiều thứ theo cách riêng của nó; Khả năng tương thích POSIX rõ ràng không phải là một mục tiêu, nhưng các nhà phát triển phản ứng nhanh với các bản vá có thêm tùy chọn / mô phỏng hành vi giúp mọi thứ trở nên gần gũi hơn với POSIX. Nhưng khi bạn bắt đầu thực sự đi vào sức mạnh của trình bao, bạn bắt đầu tạo các tập lệnh chỉ viết, thậm chí còn hơn cả bash.
bash là POSIX sh + ksh + pedanticism, với một số tính năng hiện được sao chép từ zsh. Nó cũng có các tập lệnh chỉ viết nhưng vì nó có các toán tử ít mạnh hơn, cuối cùng bạn không sử dụng tính đơn giản của zsh và mọi thứ có thể dễ đọc hơn (ngoại trừ tất cả các trích dẫn để tránh phân tách khoảng trắng, mảng $ ksh-style ngu ngốc có nghĩa là trước tiên -element-of-mảng, không phải tất cả các phần tử của mảng, v.v.).
Viết các tập lệnh tận dụng tối đa sức mạnh của một trong hai lớp vỏ là không khôn ngoan, trừ khi bạn ở trong một môi trường bị hạn chế (ví dụ, viết các tập lệnh RC hệ thống, trong đó một số FS có thể không được gắn, v.v.). Như một lý tưởng, sử dụng Perl / Python / Ruby / bất cứ thứ gì đủ lớn để bạn cần sự biểu cảm không có trong Bourne sh, nếu bạn muốn người khác có thể duy trì nó. Giữ công cụ shell cho những thứ liên quan đến shell tương tác (lập trình hoàn thành tab, v.v.).
Tôi sẽ không sử dụng bash trên zsh. Tôi sẽ sử dụng zsh zsh cho các tập lệnh đơn giản hoặc chuyển sang ngôn ngữ nơi các mảng kết hợp có các toán tử hợp lý (không giống như trong zsh, một lần nữa, chúng là 'súc tích'). Tôi có thể chuyển tập lệnh sh thành bash nếu tôi cần một tính năng nhỏ đó để mở rộng tập lệnh đã được chứng minh hiện có và không có thời gian để viết lại tập lệnh đó ngay bây giờ.