Hầu hết các shell được sử dụng trong các môi trường UNIX hiện đại đều có nghĩa là phù hợp với đặc tả kỹ thuật POSIX sh. POSIX sh có nguồn gốc từ vỏ Korn ban đầu (ksh88), lần lượt được lấy từ vỏ Bourne trước đó, nhưng POSIX sh chỉ chỉ định một tập hợp con nhỏ của chức năng thậm chí là ksh88. Một shell chỉ thực hiện yêu cầu tối thiểu là thiếu nhiều tính năng cần thiết để viết tất cả trừ các kịch bản tầm thường nhất một cách an toàn và hợp lý. Ví dụ, các biến và mảng cục bộ là các phần mở rộng không chuẩn.
Do đó, lý do đầu tiên là mở rộng vỏ với các tính năng bổ sung. Vỏ khác nhau chọn tập trung vào những thứ khác nhau. Ví dụ, Zsh tập trung vào các tính năng tương tác nâng cao trong khi ksh93 (vỏ korn "gốc" hiện tại) tập trung vào các tính năng và hiệu suất lập trình mạnh mẽ. Ngay cả các shell rất tối thiểu như Dash cũng thêm ít nhất một vài tính năng bổ sung không chuẩn như các biến cục bộ.
Các tính năng bổ sung hiếm khi có khả năng tương tác rộng rãi, nếu có. Hầu hết các tính năng của ksh88 có khả năng tương tác khá tốt, chẳng hạn như cú pháp toàn cầu mở rộng, nhưng với các tính năng không chuẩn, không có gì đảm bảo và bạn phải thực sự biết bạn đang làm gì để sử dụng chúng theo cách di động.
Lý do thứ hai là di sản. Vẫn còn rất nhiều Unix độc quyền ngoài kia sử dụng các triển khai phi tiêu chuẩn cổ đại cho / bin / sh của họ. Cho đến gần đây, Solaris vẫn sử dụng Bourne như là sự thách thức của họ và chọn duy trì lớp vỏ Gia truyền thay vì nâng cấp lên thứ gì đó hiện đại. Các hệ thống này thường đi kèm với các shell khác nhau mà bạn có thể chuyển sang, ví dụ bằng cách thay đổi biến PATH của bạn hoặc thay đổi shebang trong các tập lệnh riêng lẻ.
Vì vậy, để tóm tắt. Có nhiều shell, thường theo mặc định:
- Đối với các tính năng bổ sung, đặc biệt là để đối phó với các tính năng bổ sung không di động.
- Để xử lý các tập lệnh kế thừa thường không được xác định.
- kích thước / hiệu suất. Các hệ thống nhúng thường yêu cầu các shell nhỏ như mksh hoặc busybox sh.
- Lý do cấp phép. AT & T ksh là phần mềm độc quyền cho đến khoảng năm 2000 hoặc lâu hơn. Điều này phần lớn là những gì đã tạo ra tất cả các bản sao giống như ksh như Zsh và Bash.
- Những lý do lịch sử khác. Mặc dù ngày nay không phổ biến lắm, nhưng đã có những nỗ lực triệt để trong việc thiết kế lại ngôn ngữ, chẳng hạn như scsh và es. Tính năng thay thế quá trình của nhiều shell ban đầu đến từ RC (với một cú pháp khác nhau một chút) và mở rộng cú đúp từ csh. Các vỏ khác nhau có sự kết hợp khác nhau của các tính năng như vậy có sẵn, thường có một số khác biệt tinh tế hoặc không quá tinh tế.