For ((…)) {…;} è una sintassi della shell valida? In quali conchiglie?


Risposte:


30

{ ...; }era già stato accettato al posto di do ...; donein forloop nella prima versione della shell Bourne in Unix V7 alla fine degli anni '70 (vedi il codice sorgente ) sebbene non sia mai stato documentato per quanto ne so.

Tutti ksh(sia quello originale derivato dalla shell Bourne, sia il ksh93 riscrivono), pdksh¹ (e derivati), bash(dall'inizio nel 1989) e lo zshsupportano. Non conosco alcun ashderivato che lo faccia. yashneanche, ma è yashstato scritto nello standard POSIX.

In zsh, il supporto è stato aggiunto con 2.0 nel 1991, ma come parte di una nuova gamma di forme brevi per la maggior parte dei costrutti che va oltre la sintassi di Bourne. Non è solo for i in 1 2; { ...; }, è for i in 1 2; any-command(e sue varianti). Ed è documentato ed è stato dalla sua introduzione .

AFAIK, a parte zsh, solo pdksh lo documenta (per entrambi fore select).

Per quanto riguarda il ((init; condition; action))modulo, quello proviene da ksh93ed è stato copiato da zshe bash.

Né quello ((...))né il { ...; }posto di do ...; donesono POSIX.

Vedi anche Qual è lo scopo della parola chiave "do" in Bash per i loop? per più forforme di loop.


¹ non versioni precedenti, né la shell Forsyth su cui si basa. È stato aggiunto in 5.1.1 nel 1994 e questo probabilmente spiega perché è stato documentato lì


1
Caspita, il sig. Bourne ha accolto pienamente l'uso del preprocessore c in quel codice sorgente degli anni '70.
Trauma digitale il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.