A maioria dos shells usados em ambientes UNIX modernos devem estar em conformidade com a especificação sh 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 apenas implementa o requisito mínimo não possui muitos recursos necessários para gravar todos os scripts, exceto os mais triviais, de uma maneira segura e razoável. Por exemplo, variáveis locais e matrizes são extras não padrão.
Portanto, o primeiro motivo é estender o shell com recursos extras. Escudos diferentes escolhem se concentrar em coisas diferentes. Por exemplo, Zsh se concentra em recursos interativos avançados, enquanto o ksh93 (o atual shell korn "original") se concentra em recursos e desempenho poderosos de programação. Até mesmo minúsculos shells como Dash adicionam pelo menos alguns extras não-padrão como variáveis locais.
Recursos extras raramente são amplamente interoperáveis. A maioria do conjunto de recursos do ksh88 é razoavelmente interoperável, como a sintaxe de globbing estendido, 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.
O segundo motivo é legado. Ainda existem muitos Unixes proprietários que usam implementações não padrão antigas para seus / bin / sh. Até recentemente, o Solaris ainda usava Bourne como sua opção 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 dentro de 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. Sistemas embarcados geralmente requerem pequenas conchas como mksh ou busybox sh.
- Razões de licenciamento. AT & T ksh era um software proprietário até cerca de 2000 ou mais. Isso é basicamente o que deu origem a todos os clones semelhantes a ksh, como Zsh e Bash.
- Outros motivos históricos. Embora não seja muito popular hoje em dia, houve tentativas radicais de redesenhar a linguagem, como o scsh e es. O recurso de substituição de processo de muitos shells vem originalmente do rc (com uma sintaxe diferente) e suporta a expansão do csh. Diferentes conchas têm diferentes combinações de tais recursos disponíveis, geralmente com algumas diferenças sutis ou não tão sutis.