커맨드 라인에서 for 루프를 만드는 방법?


22

간단하게 보자 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실제로 어떻게 작동합니까?

답변:


16

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

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

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

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

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

2
@ dr01이 지적했듯이 최종 스크립트가 잘못되었습니다 do. 이후 세미콜론을 제거해야합니다 .
Jake

1
@jake, 이것은 또한 뒤에 세미콜론을 제거해야한다고 말합니다 do. 또한이 답변 은`do '다음에 세미콜론을 제거해야하는 이유 를 설명 합니다.
user4556274

$i파일 이름의 일부 여야 한다면 어떻게 해야합니까? 큰 따옴표가 필요합니까?
Anonymous

18

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

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

for i in `seq 1 10`; do echo $i; done 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.