Sou usuário do Bash há algum tempo. Quero aprender pelo menos um outro shell agora, então estou aprendendo o Korn Shell. No entanto, não parece que o Ksh tenha tido grandes atualizações por quase vinte anos, e li que o Zsh incorpora recursos dele. Tenho lido muitas perguntas de comparação de shell na rede StackExchange, mas não encontrei uma resposta para isso:Existem recursos do Korn Shell que o Zsh não incorpora?Se sim, quais são eles?
Responder1
Aqui está oArtigo da Wikipedia sobre comparação de shell de comando.
De acordo com isso, o único recurso que o ksh tem e o zsh não éParâmetros nomeadospara "tipos" definidos pelo usuário. Pode haver outros, pois esse artigo não é uma lista exaustiva, especialmente para recursos obscuros.
Indo na outra direção, a resposta à sua pergunta poderia encher um livro (possivelmenteEste).
O Zsh possui muitos recursos que o ksh não possui. Alguns populares sãopilha de comandos,pilha de diretórios,compartilhamento de históricoeprompt.
- Pilha de comandosé quando você está digitando um comando e percebe que deve executar outro comando primeiro. Basta enviar a linha atual para a pilha de comandos, executar o outro comando e retirar o comando da pilha. Você pode fazer isso várias vezes. (zsh é o único shell que conheço que fornece isso).
- Pilha de diretório(também conhecido como
pushd
/popd
) é quando você deseja mudar para diretórios em sucessão e depois cd novamente na ordem inversa. (Muitos shells fornecem isso, incluindo o bash). - Compartilhamento de históricoé onde cada shell aberto compartilha uma única história comum. Execute um comando em uma janela, mude para outra e ele ficará disponível no seu histórico.
- prompté exatamente como o seu prompt, exceto que é justificado corretamente. Muitas pessoas gostam de colocar
cwd
oudate
no arquivorprompt
.
Aqui estão algumas discussões nos sites do Stack Exchange sobre zsh:
Responder2
ksh88, a variante mais famosa, pois foi incluída no SVR4, a linguagem bash
é baseada principalmente naquela pdksh parcialmente clonada, e cujo subconjunto é a base para a especificação POSIX de sh
não evoluiu muito (além de algumas correções de bugs e alinhamentos POSIX por alguns fornecedores) desde seu último lançamento em maio de 1993 (ksh88i).
No entanto, ksh93, uma reescrita de David Korn, lançada pela primeira vez em dezembro de 1993, esteve em desenvolvimento ativo até cerca de 2014 e seu código-fonte foilibertadoem 2000. O último lançamento oficial, ksh93u+, foi feito em agosto de 2012 (apenas algumas semanas depois de você ter feito essa pergunta), e houve um lançamento "beta" (ksh93v-) feito em 2014 pelos autores originais depois de terem sido feitos redundante pela AT&T com muitos novos recursos.
Houve um esforço da comunidade para continuar o desenvolvimento e modernizar o código baseado em ksh93v- o que levou a um ksh2020 masesse esforço foi agora abandonado. Aesforço separado para manter ksh93u+depois disso parece estar indo na mesma direção. Enquanto umnovo (ksh93u+m)parece um pouco mais promissor no momento.
ksh93 é/era mais que um shell. Ele foi desenvolvido junto com uma frota de utilitários reutilizando parte do mesmo código e que poderia ser integrado ao ksh93, um pouco como o busybox.
Observe que foi mais umpesquisaresforço, é muitas vezes considerado experimental e está muito pouco documentado.
Embora zsh
tenha sido desenvolvido principalmente para ser um poderoso shell interativo, o foco do ksh93 era mais como uma linguagem de programação. Tem havido muito esforço na linguagem e na otimização com o objetivo de estar em uma categoria semelhante a perl
ou python
por exemplo.
Existem muitos recursos do ksh93 que o zsh não possui, assim como existem muitos recursos do zsh que o ksh93 não possui, e ambos emprestaram recursos um do outro. Há um grande conjunto de recursos comuns e coisas que ambos podem fazer, mas de maneiras muito diferentes.
Entre as coisas que o ksh93 tem, mas o zsh não:
- todos os recursos internos do ast-open:
ksh93
quando construído como parte do ast-open possui muitos recursos internos que o zsh não possui, incluindo versões melhoradas de alguns utilitários padrão comodate
,join
,head
,tr
,uniq
,wc
... (embora o zsh tenha alguns dos funcionalidade daqueles em seus próprios recursos internos ou de linguagem). Esse é ootimizaçãolado das coisas. Você não pode serperl
assim se precisar bifurcar um processo para fazer alguma coisa. - substituições de comandos sem bifurcação (
$(...)
) e substituições de comandos que não criam um ambiente de subshell${ ...; }
. - matrizes multidimensionais:
a=((a b) (c d))
- características de programação orientada a objetos (tipos, estruturas, disciplinas, métodos...).
- escopo estático para variáveis e opções (
zsh
temprivate
escopo para variáveis, mas não escopo estático para opções). - referências de nome (essenciais para um shell com escopo estático e estruturas de programação de objetos, não tanto para aqueles com escopo dinâmico como zsh ou bash)
- manipulação de data/hora, incluindo linguagem natural, crontab, formatos iso
printf
edate
internos (zsh
éstrftime
muito limitado em comparação com isso). - alguns operadores de redirecionamento úteis (
<#((...))
para procurar,<>;
substituir e truncar...). - espaços para nome
- pools de empregos e coshells.
- Codificação/decodificação CSV/URI/entidades HTML/base64.
- codificação/decodificação json em ksh93v- para (des)serializar suas estruturas de dados avançadas em um formato que outras ferramentas possam entender (com muitos bugs, removido em ksh2020).
$"..."
para localização de mensagens/dev/tcp
,/dev/udp
(zsh
temztcp
,zsocket
para soquetes de domínio UNIX, mas sem UDP)- também havia um
dtksh
shell que adicionava funcionalidade do kit de ferramentas X ao ksh93 incluído no CDE nos anos 90. - há um
shcomp
paracompilarcódigo ksh.