표현:
$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4
잘 작동합니다.
대체되는 설명서에서 이 구문에 대한 설명을 찾을 수 없습니다 {...;}
.; do ...; done
매뉴얼에 참고사항이 있나요? 어떤 쉘에서 작동합니까?
답변1
{ ...; }
이미 1970년대 후반에 Unix V7의 Bourne 셸 첫 번째 버전에서는 do ...; done
루프 내 교체가 허용되었습니다(참조:for
소스 코드) 비록 제가 아는 한 그것은 녹음된 적이 없습니다.
모두 ksh
(Bourne 쉘에서 파생된 원래 버전 및 ksh93 재작성), pdksh
1(및 그 파생물), bash
(1989년 이후) zsh
을 지원합니다. 나는 ash
이것을 수행하는 파생 상품 을 모릅니다 . yash
아니요, 하지만 yash
POSIX 표준에 따라 작성되었습니다.
지원은 1991 년 zsh
2.0에 추가되었지만 Bourne 문법을 넘어서 대부분의 구문에 대한 일련의 새로운 짧은 형식의 일부였습니다. 뿐만 아니라 그것은 (및 그 변형) for i in 1 2; { ...; }
입니다 . for i in 1 2; any-command
기록도 있고거기그리고출시 이후.
AFAIK는 pdksh를 제외하고 zsh
pdksh만이 이를 문서화했습니다(및 for
) select
.
형식 은 ((init; condition; action))
and에서 유래하고 ksh93
and에 의해 복사됩니다.zsh
bash
그것 ((...))
이나 { ...; }
대안도 do ...; done
POSIX가 아닙니다.
당신은 또한 볼 수 있습니다Bash for 루프에서 "do" 키워드의 목적은 무엇입니까?더 많은 for
원형 형태.
¹ 이전 버전도 아니고 기반이 되는 Forsyth 셸도 아닙니다. 1994년 5.1.1에 추가되었는데, 아마도 거기에 문서화되어 있는 이유가 설명될 것입니다.