Bash for 루프에서 "do" 키워드의 목적은 무엇입니까?

Bash for 루프에서 "do" 키워드의 목적은 무엇입니까?

doBash 루프 구문 for에서 키워드의 목적은 무엇입니까 ? 나에게 이것은 중복된 느낌이다.

for i in `seq 1 2`; do echo "hi"; done

왜 구문이 이와 같지 않습니까?

for i in `seq 1 2`; echo "hi"; done

나는 그것을 확신한다하다목적을 채우세요. 나는 단지 배우고 싶다.

답변1

이 구문은 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/looping 과도 일치합니다 .untildo

while
  cmd1
  cmd2
do
  cmd3
  cmd4
done

do목록이 어디에 있는지 알아야 합니다 .상황명령이 종료됩니다.

이는 Bourne 쉘에서는 지원되지 않습니다 for i; do. 표준 2016 버전 이전에는 이 구문도 POSIX가 아니었습니다( for i do항상 POSIX였습니다. 참조).관련 오스틴 그룹 오류).

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또는 를 변수명으로 사용할 수는 없습니다 .)doj

문서화되는 경우는 거의 없지만 대부분의 Bourne 유사 셸(Bourne, ksh, bash, zsh, notnor ash) 은 yash다음을 지원합니다.

for i in 1 2 3; { echo "$i";}

Bourne 쉘 kshzsh다음을 bash지원합니다.

for i { echo "$i"; }

And bash, kshzsh(Bourne 쉘은 아님) 지원:

for i; { echo "$i"; }

모두(Bourne,,, bash) ksh지원 zsh:

for i
{ echo "$i";}

ksh93, bash, zsh지원하다:

for ((i=1;i<=3;i++)) { echo "$i"; }

관련 정보