![Bash for 루프에서 "do" 키워드의 목적은 무엇입니까?](https://linux55.com/image/93558/Bash%20for%20%EB%A3%A8%ED%94%84%EC%97%90%EC%84%9C%20%22do%22%20%ED%82%A4%EC%9B%8C%EB%93%9C%EC%9D%98%20%EB%AA%A9%EC%A0%81%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
do
Bash 루프 구문 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 과도 일치합니다 .until
do
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
또는 를 변수명으로 사용할 수는 없습니다 .)do
j
문서화되는 경우는 거의 없지만 대부분의 Bourne 유사 셸(Bourne, ksh, bash, zsh, notnor ash
) 은 yash
다음을 지원합니다.
for i in 1 2 3; { echo "$i";}
Bourne 쉘 ksh
은 zsh
다음을 bash
지원합니다.
for i { echo "$i"; }
And 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"; }