나는 while
루프가 무엇인지 알고 있습니다. 그러나 나는 그것이 다음에서만 작동하는 것을 보았습니다.
while [condition]
while ![condition]
while TRUE (infinite loop)
다음 문은 또는 while
이어야 합니다 .TRUE
FALSE
라는 쉘 내장 명령이 있습니다 :
. 아무 것도 하지 않는 더미 명령이라고 설명되어 있는데, 여기서도 같은지, 또는 가 될 수 있는지는 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
사람들은 항상 내장된 :
것을 선호했습니다 (오래 전, 현재 대부분의 쉘에는 내장되어 있습니다).:
true
true
볼 수 있는 다른 변형은 다음과 같습니다.
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
이러한 조건 목록은 다른 명령보다 더 특별하지 않습니다. 명령 이 명령을 여러 번 사용하십시오.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.