A maioria dos shells usados em ambientes UNIX modernos deve estar em conformidade com a especificação sh do POSIX. O POSIX sh é derivado do shell Korn original (ksh88), que por sua vez é derivado do shell Bourne anterior, mas o POSIX sh especifica apenas um pequeno subconjunto da funcionalidade do mesmo ksh88. Um shell que implementa apenas o requisito mínimo está ausente de muitos recursos necessários para escrever todos os scripts, exceto o mais trivial, de maneira segura e razoável. Por exemplo, variáveis e matrizes locais são extras não padrão.
Portanto, o primeiro motivo é estender o shell com recursos extras. Conchas diferentes optam por se concentrar em coisas diferentes. Por exemplo, o Zsh se concentra em recursos interativos avançados, enquanto o ksh93 (o atual shell korn "original") se concentra em recursos e desempenho avançados de programação. Mesmo shells muito mínimos como o Dash adicionam pelo menos alguns extras não-padrão, como variáveis locais.
Recursos extras raramente são amplamente interoperáveis, se houver. A maior parte do conjunto de recursos do ksh88 é bastante interoperável, como a sintaxe de globbing estendida, mas com recursos não padrão, não há garantias e você deve saber realmente o que está fazendo para usá-los de maneira portátil.
A segunda razão é legada. Ainda existem muitos Unixes proprietários por aí que usam implementações não padronizadas antigas para o seu / bin / sh. Até recentemente, o Solaris ainda usava Bourne como sua armadilha e optou por manter o shell Heirloom em vez de atualizar para algo moderno. Esses sistemas geralmente vêm com shells diferentes para os quais você pode alternar, por exemplo, alterando sua variável PATH ou alterando shebangs em scripts individuais.
Então, para resumir. Existem vários shells, geralmente por padrão:
- Para recursos extras, especialmente para lidar com extras não portáteis.
- Para lidar com scripts herdados que geralmente não são mantidos.
- tamanho / desempenho. Os sistemas embarcados geralmente exigem pequenas conchas, como mksh ou busybox sh.
- Razões de licenciamento. O AT&T ksh era um software proprietário até cerca de 2000. Foi isso que deu origem a todos os clones do tipo ksh, como Zsh e Bash.
- Outras razões históricas. Embora não seja muito popular hoje em dia, houve tentativas radicais de redesenhar o idioma, como scsh e es. O recurso de substituição de processo de muitos shells vem originalmente do rc (com sintaxe um pouco diferente) e da expansão do csh. Cascas diferentes têm combinações diferentes de tais recursos disponíveis, geralmente com algumas diferenças sutis ou não tão sutis.