답변:
구문은 Bourne 쉘에서 상속됩니다.
변수 이름 in
다음에 명시 적으로 지정된 요소 목록을 갖거나 do
위치 매개 변수를 반복 하도록 할 수 있습니다 .
for i in 1 2 3
do
echo "$i"
done
또는
set 1 2 3
for i do
echo "$i"
done
갖는 do
(엄격히 첫 번째에 필요한 아닌 경우에도) 두 경우 모두에서하는 것은 더 일관된 구문 있습니다. 또한 필요한 곳에서 while
/ until
루프 와 일치 do
합니다.
while
cmd1
cmd2
do
cmd3
cmd4
done
당신은 필요한 do
목록 어디에 있는지 조건이 끝을 명령한다.
Bourne 쉘은 지원하지 않습니다 for i; do
. 이 구문은 2016 년 표준 버전까지 for i do
항상 POSIX가 아니 었습니다 ( 항상 POSIX 였습니다. 관련 Austin 그룹 버그 참조 ).
zsh
다음과 같은 몇 가지 속기 형식이 있습니다.
for i in 1 2 3; echo $i
for i (1 2 3) echo $i
for ((i=1;i<=3;i++)) echo $i
또는 하나 이상의 변수를 지원합니다.
for i j (1 a 2 b) echo $i $j
( 위 대신 in
또는 do
변수 이름으로 사용할 수는 없지만 j
).
거의 문서화되지 않더라도, 대부분의 본쉘 (Bourne의, KSH, 배쉬, zsh을하지 ash
않고 yash
)도 지원합니다
for i in 1 2 3; { echo "$i";}
Bourne 쉘 ksh
및 zsh
(하지만 아님 bash
)은 다음을 지원합니다.
for i { echo "$i"; }
동안 bash
, ksh
그리고 zsh
(그러나 Bourne 쉘) 지원 :
for i; { echo "$i"; }
모든 (Bourne의, bash
, ksh
, zsh
) 지원 :
for i
{ echo "$i";}
ksh93
, bash
, zsh
지원 :
for ((i=1;i<=3;i++)) { echo "$i"; }
for
. 명령은 개행 또는 세미콜론으로 종료 될 수 있습니다. if
/ while
( then
보다 오히려 전자)에 대해 더 의미가 do
있지만 원칙적으로 그것들은 생략했을 수 있으며 여러 명령의 (희귀 한) 사용을 위해 서브 쉘 또는 중괄호가 필요했습니다. Bourne 쉘이 실제로 수행하는 이유는 ALGOL이 수행하기 때문이며 done
철자가 아닌 것이 기쁘다 od
.
od
옥타 덤프 프로그램의 이름으로 이미 사용 되었기 때문 입니다.
for i do
는 Bourne과 POSIX이지만 이전 버전의 재 기반 셸 IIRC에서는 작동하지 않습니다. 공백 문자가 없으면 for i in "$@"
Bourne 쉘에서 작동 $IFS
하지 않습니다. for i<newline>do
아주 오래된 BSD 시스템을 고려해야 할 경우 실제로 가장 이식성이 뛰어납니다. 자세한 내용은 in-ulm.de/~mascheck/various/bourne_args 를 참조하십시오