명령줄에서 for 루프를 만드는 방법은 무엇입니까?

명령줄에서 for 루프를 만드는 방법은 무엇입니까?

간단하게 살펴보자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

관련 정보