É para ((…)) {…;} uma sintaxe válida do shell? Em que conchas?


Respostas:


30

{ ...; }já foi aceito no lugar de do ...; doneem forloops na primeira versão do shell Bourne em Unix V7 no final dos anos 70 (veja o código fonte ) mas nunca documentado, tanto quanto eu sei.

Todos ksh(tanto o original derivado do shell Bourne quanto o ksh93 reescrevem), pdksh¹ (e derivados), bash(desde o início em 1989) e o zshsuportam. Não conheço nenhum ashderivado que o faça. yashtambém não yashfoi gravado no padrão POSIX.

Em zsh, o suporte foi adicionado com o 2.0 em 1991, mas como parte de um novo intervalo de formas curtas para a maioria das construções, que vai além da sintaxe de Bourne. Não é apenas for i in 1 2; { ...; }, é for i in 1 2; any-command(e suas variantes). E está documentado e existe desde a sua introdução .

AFAIK, ao lado zsh, apenas o pdksh o documenta (para ambos fore select).

Quanto ao ((init; condition; action))formulário, que vem ksh93e foi copiado por zshe bash.

Nem isso ((...))nem o { ...; }lugar de do ...; donePOSIX.

Consulte também Qual é o objetivo da palavra-chave "do" no Bash para loops? para mais forformas de loop.


¹ não versões anteriores, nem o shell Forsyth no qual se baseia. Foi adicionado em 5.1.1 em 1994 e provavelmente explica por que foi documentado lá


1
Uau, o Sr. Bourne adotou completamente o uso do pré-processador c no código-fonte dos anos 70.
Digital Trauma
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.