"동안 :)"은(는) 무슨 뜻인가요? 평균?

"동안 :)"은(는) 무슨 뜻인가요? 평균?

나는 while루프가 무엇인지 알고 있습니다. 그러나 나는 그것이 다음에서만 작동하는 것을 보았습니다.

while [condition]
while ![condition]
while TRUE (infinite loop)

뒤의 문은 또는 while이어야 합니다 .TRUEFALSE

라는 쉘 내장 명령이 있습니다 :. 아무것도 하지 않는 더미 명령이라고 설명하는데, 여기서도 같은지, 아니면 될 수 있는지는 TRUE모르겠습니다 FALSE. 어쩌면 뭔가 다를지도 모르지만, 뭐죠?

답변1

구문은 다음과 같습니다.

while
  first list of commands
do
  second list of commands
done

첫 번째 명령 목록(해당 목록의 마지막 실행)이 성공하는 한 루프에서 두 번째 명령 목록을 실행합니다.

그 안에첫 번째 명령 목록, 명령을 사용하여 다양한 종류의 테스트를 수행할 수도 있고 , 아무 작업도 수행하지 않고 성공을 반환하는 null 명령 또는 기타 명령을 [사용할 수도 있습니다 .:

while :; do cmd; done

cmd항상 성공을 반환하는 것처럼 영원히 계속해서 실행됩니다 :. 그게 다야영원히고리. 대신 명령 을 사용하여 true더 읽기 쉽게 만들 수 있습니다.

while true; do cmd; done

사람들은 항상 내장되어 있지만 그렇지 않은 :것을 선호했습니다 (오래 전, 요즘 대부분의 쉘에는 내장되어 있음) 1.:truetrue

볼 수 있는 다른 변형:

while [ 1 ];  do cmd; done

위에서는 "1" 문자열이 비어 있지 않은지 테스트하기 위해 명령을 호출하고 있습니다 [(따라서 항상 true임).

while ((1)); do cmd; done

Korn/bash/zsh 구문을 사용하여 C를 ((...))모방합니다 .while(1) { ...; }

또는 until false; do cmd; done, until ! true... 와 같은 더 복잡한 것

때로는 다음과 같이 별칭이 지정됩니다.

alias forever='while :; do'

따라서 다음과 같이 할 수 있습니다:

forever cmd; done

이 상태가 다음과 같다는 사실을 아는 사람은 거의 없습니다.목록명령의. 예를 들어, 사람들이 다음과 같이 쓰는 것을 볼 수 있습니다.

while :; do
  cmd1
  cmd2 || break
  cmd3
done

그들이 쓸 수 있었을 때:

while
  cmd1
  cmd2
do
  cmd3
done

그것이 의미가 있습니다.목록while cmd1 && cmd2; do...; done명령 목록과 같은 작업을 자주 수행하고 싶기 때문입니다 .

어떤 경우든 [다른 명령과 마찬가지로(현대 Bourne과 같은 쉘에 내장되어 있지만) // 조건 목록에서만 사용할 필요는 없으며 if해당 while조건 until목록에는 다른 명령보다 해당 명령을 더 많이 사용합니다.


¹ :또한 더 짧고 인수를 허용합니다(무시됨). 인수를 전달하면 true또는 의 동작이 지정되지 않습니다 . false예를 들어 다음과 같이 할 수 있습니다.

while : you wait; do
  something
done

그러나 다음의 행동은:

until false is true; do
  something
done

false지정되지 않았습니다(대부분의 쉘/ 구현 에서는 작동하지만 ).

답변2

while :무한 루프이다. :단지 아무 것도 하지 않습니다(성공적으로).

따라서 쉘이 아무것도 하지 않고 영원히 정지되도록 하려면 다음과 같이 작성할 수 있습니다.

while :
do
    :
done

;또는 줄 바꿈 대신 한 줄로 :while :; do :; done

while :특별한 조건을 붙이지 않고 어떤 일을 반복해서 하고 싶을 때 주로 사용됩니다. 루프 내에서 continue문 을 사용 break하여 제어하거나 구문처럼 조건을 루프 끝으로 이동할 수 있습니다 do ... while.

답변3

그러나 while 뒤의 문은 TRUE 또는 FALSE여야 합니다.

아니요, 조건 부분의 명령은 어떤 명령 (*) 이라도 될 수 있습니다 .모두쉘 명령에는 일부 반환 값이 있으며 while루프(조건부 포함 if)는 0의 반환 값을 "true"로, 다른 모든 값은 "false"로 사용합니다. (* 또는 여러 명령 목록, 마지막 명령이 중요함)

에 관해서는 :,배쉬 매뉴얼반환 상태가 무엇인지 명확하게 알려줍니다.

: [arguments]
인수를 확장하고 리디렉션을 수행하는 것 외에는 아무것도 수행하지 마십시오. 반환 상태는 0입니다.

내장 help기능은 더욱 명확합니다.

 $ help :
 [...]
 No effect; the command does nothing
 Exit Status:
 Always succeeds.

관련 정보