"동안 :)"은(는) 무슨 뜻인가요? 의미는?

"동안 :)"은(는) 무슨 뜻인가요? 의미는?

나는 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

사람들은 항상 내장된 :것을 선호했습니다 (오래 전, 현재 대부분의 쉘에는 내장되어 있습니다).:truetrue

볼 수 있는 다른 변형은 다음과 같습니다.

while [ 1 ];  do cmd; done

[위에서는 "1" 문자열이 비어 있지 않은지(따라서 항상 참인지) 테스트하는 명령을 호출합니다.

while ((1)); do cmd; done

C 구문을 ((...))모방하려면 Korn/bash/zsh 구문을 사용하세요 .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이러한 조건 목록은 다른 명령보다 더 특별하지 않습니다. 명령 이 명령을 여러 번 사용하십시오.whileuntil


¹ :또한 더 짧고 인수를 허용합니다(무시됨). 인수를 전달하는 경우 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.

관련 정보