간단하게 살펴보자for loop
#!/bin/bash
for i in `seq 1 10`;
do
echo $i
done
Bash 스크립트의 세미콜론은 쉘이 현재 명령을 동기식으로 실행한 후 다음 명령으로 이동하도록 합니다. Enter 키를 누르면 버퍼를 즉시 플러시하기 위해 다음 명령을 입력할 수 없다는 점을 제외하면 기본적으로 동일한 작업이 수행됩니다.
그렇다면 쉘이 다음 줄을 해석할 수 없는 이유는 무엇입니까?
for i in `seq 1 10`; do; echo $i; done
이것은 for loop
실제로 어떻게 작동합니까?
답변1
for
매뉴얼 페이지의 반복 구문은 bash
다음과 같습니다.
for name [ [ in [ word ... ] ] ; ] do list ; done
세미콜론은 매뉴얼 페이지의 다른 부분에 설명된 대로 캐리지 리턴으로 대체될 수 있습니다 bash
. "명령을 구분하기 위해 세미콜론 대신 하나 이상의 일련의 줄 바꿈이 목록에 나타날 수 있습니다."
그러나 그 반대는 사실이 아닙니다. 개행 문자를 임의로 세미콜론으로 바꿀 수는 없습니다. 위의 구문 규칙을 따르고 뒤에 추가 세미콜론을 삽입하지 않는 한 여러 줄 스크립트를 단일 줄로 변환할 수 있습니다 do
.
for i in `seq 1 10`; do echo $i; done
답변2
후행 세미콜론 do
은 오류이므로 발생해서는 안 됩니다.
다음은 올바르게 실행됩니다.
for i in `seq 1 10`; do echo $i; done
답변3
시도 해봐:
> for name in {Regular,Italic,Bold-Italic}; do echo $name;done
Regular
Italic
Bold-Italic
이 요소 {1,2,3}
는버팀대 확장. 기본적으로 쉘은 이 요소를 확장하고 for 루프에서 생성된 각 항목을 사용합니다(이봐스텐트 확장에 대한 자세한 내용은 참조). 사용되지 않으면 {}
쉘은 이를 단일 요소로 이해 1,2,3
하고 루프에서 한 번만 전달되어 다음을 생성합니다.
❯ for name in Regular,Italic,Bold-Italic; do echo $name;done
Regular,Italic,Bold-Italic
이것은 당신이 기대하는 것이 아닐 수도 있습니다 ...
또는 중괄호 확장을 사용하여 다음 표기법을 사용하여 시퀀스를 생성할 수도 있습니다.
❯ for i in {1..5}; do echo $i; done
1
2
3
4
5
중괄호 확장을 사용하여 시퀀스 패턴으로 다양한 문자열을 생성하고 이를 for 루프에서 다음과 같이 사용할 수 있다는 점을 언급할 가치가 있습니다.
❯ for i in A{1..5}BC; do echo $i; done
A1BC
A2BC
A3BC
A4BC
A5BC