나는 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
사람들은 항상 내장되어 있지만 그렇지 않은 :
것을 선호했습니다 (오래 전, 요즘 대부분의 쉘에는 내장되어 있음) 1.:
true
true
볼 수 있는 다른 변형:
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.