Wyrażenie:
$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4
działa poprawnie.
Nie mogę znaleźć opisu tej składni, w której {...;}
zastępuje ; do ...; done
ona instrukcję.
Czy jest odniesienie w instrukcji? Dla których powłok to działa poprawnie?
Odpowiedzi:
{ ...; }
został już zaakceptowany zamiastdo ...; done
wfor
pętlach w pierwszej wersji powłoki Bourne'a w Unixie V7 pod koniec lat 70. (patrz kod źródłowy ), chociaż nigdy nie udokumentowano o ile wiem.Wszystkie
ksh
(zarówno oryginalne, pochodzące z powłoki Bourne'a, jak i przepisane przez ksh93),pdksh
¹ (i pochodne)bash
(od początku w 1989 r.) Izsh
obsługują to. Nie znam żadnejash
takiej pochodnej.yash
też nie, aleyash
został napisany do standardu POSIX.W
zsh
1991 r. Dodano obsługę wersji 2.0 w wersji 2.0, ale jako część nowej gamy krótkich form dla większości konstrukcji, która wykracza poza składnię Bourne'a. To nie tylkofor i in 1 2; { ...; }
, tofor i in 1 2; any-command
(i jego warianty). I jest tam udokumentowane i było od jego wprowadzenia .AFAIK oprócz tego
zsh
dokumentuje tylko pdksh (zarówno dla, jakfor
i dlaselect
).Jeśli chodzi o
((init; condition; action))
formularz, który pochodziksh93
i został skopiowany przezzsh
ibash
.Ani to,
((...))
ani{ ...; }
miejsce zamiastdo ...; done
POSIX.Zobacz także Jaki jest cel słowa kluczowego „do” w Bash dla pętli? więcej
for
form pętli.¹ nie wcześniejsze wersje ani powłoka Forsyth, na której jest oparta. Został dodany w 5.1.1 w 1994 roku i prawdopodobnie wyjaśnia, dlaczego został tam udokumentowany
źródło