커맨드 라인에서 for 루프를 만드는 방법? i in `seq 1

간단하게 보자 for loop

#!/bin/bash

for i in `seq 1 10`;
do
    echo $i
done

bash 스크립트의 AFAIK 세미콜론은 쉘이 현재 명령을 동기식으로 실행 한 후 다음 명령으로 이동합니다. Enter 키를 누르면 버퍼를 즉시 플러시하여 다음 명령을 입력 할 수 없다는 점을 제외하면 문자 그대로 동일합니다.

셸이 다음 줄을 해석 할 수없는 이유

for i in `seq 1 10`; do; echo $i; done

이것은 for loop실제로 어떻게 작동합니까?



답변

매뉴얼 페이지 의 for루프 구문은 다음과 같습니다.bash

for name [ [ in [ word ... ] ] ; ] do list ; done

bash매뉴얼 페이지의 다른 부분에서 언급 한 것처럼 세미콜론은 캐리지 리턴으로 대체 될 수 있습니다 . “명령을 구분하기 위해 하나 이상의 줄 바꾸기가 세미콜론 대신 목록에 나타날 수 있습니다.”

그러나 그 반대는 사실이 아닙니다. 개행을 임의로 세미콜론으로 바꿀 수 없습니다. 위의 구문 규칙을 준수하고 다음에 세미콜론을 추가하지 않으면 여러 줄 스크립트를 한 줄로 변환 할 수 있습니다 do.

for i in `seq 1 10`; do echo $i; done


답변

이후의 세미콜론 do은 오류이므로 없어야합니다.

다음은 올바르게 작동합니다.

for i in `seq 1 10`; do echo $i; done 


답변