for(( ... )){ ... ;} 유효한 쉘 구문이 있습니까? 어느 껍질에?

for(( ... )){ ... ;} 유효한 쉘 구문이 있습니까? 어느 껍질에?

표현:

$ 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 재작성), pdksh1(및 그 파생물), bash(1989년 이후) zsh을 지원합니다. 나는 ash이것을 수행하는 파생 상품 을 모릅니다 . yash아니요, 하지만 yashPOSIX 표준에 따라 작성되었습니다.

지원은 1991 년 zsh2.0에 추가되었지만 Bourne 문법을 넘어서 대부분의 구문에 대한 일련의 새로운 짧은 형식의 일부였습니다. 뿐만 아니라 그것은 (및 그 변형) for i in 1 2; { ...; }입니다 . for i in 1 2; any-command기록도 있고거기그리고출시 이후.

AFAIK는 pdksh를 제외하고 zshpdksh만이 이를 문서화했습니다(및 for) select.

형식 은 ((init; condition; action))and에서 유래하고 ksh93and에 의해 복사됩니다.zshbash

그것 ((...))이나 { ...; }대안도 do ...; donePOSIX가 아닙니다.

당신은 또한 볼 수 있습니다Bash for 루프에서 "do" 키워드의 목적은 무엇입니까?더 많은 for원형 형태.


¹ 이전 버전도 아니고 기반이 되는 Forsyth 셸도 아닙니다. 1994년 5.1.1에 추가되었는데, 아마도 거기에 문서화되어 있는 이유가 설명될 것입니다.

관련 정보