Bash에서 루프를 끊는 방법?


150

텍스트를 처리하기 위해 Bash 스크립트를 작성하려고하는데 while 루프가 필요할 수 있습니다.

예를 들어 C의 while 루프는 다음과 같습니다.

int done = 0;
while(1) {
  ...
  if(done) break;
}

그와 동등한 Bash 스크립트를 작성하고 싶습니다. 그러나 내가 일반적으로 사용했고 내가 읽은 모든 고전적인 예에서 보듯이 이것은 다음과 같습니다.

while read something;
do
...
done

그것은 수행하는 방법에 대한 어떤 도움을 제공하지 않습니다 while(1){}break;잘 정의 널리 C에 사용, 그리고 표준 입력에 대한 데이터를 읽을 필요가 없습니다된다.

누구든지 위의 C 코드와 동등한 Bash를 도와 줄 수 있습니까?

답변:


189

와 다르지 않습니다 bash.

done=0
while : ; do
  ...
  if [ "$done" -ne 0 ]; then
      break
  fi
done

:no-op 명령입니다. 종료 상태는 항상 0이므로 0 done이 아닌 값이 주어질 때까지 루프가 실행됩니다 .


done루프를 종료하기 위해 값을 설정하고 테스트 할 수있는 여러 가지 방법이 있습니다 . 위에서 보여준 것은 POSIX 호환 쉘에서 작동해야합니다.


done변수 이름으로 사용해도 괜찮 습니까? 쉘 키워드입니다 ... 최소한 혼란 스럽습니다.
Michael Dorst

59
while true ; do
    ...
    if [ something ]; then
        break
    fi
done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.