제가 알기로는 until
block은 의 반대 버전입니다 while
.
like until "condition A is met"
는 와 같습니다 while "condition A is not met"
.
python
예 를 들어 일부 현대 언어에서는 while
.
그렇다면 저자는 왜 동시에 bourne shell
디자인을 until
했는가 while
?
while
교체할 수 없는 상황이 있습니까 until
?
답변1
이 구문이 파생된 Bourne 쉘에는 명령 부정( ) 연산자가 없습니다 !
. 따라서 다음을 if
사용할 수 있는 위치에 대해서는 큰 문제가 되지 않습니다.
if cmd; then
: no-op
else
something if cmd returns false
fi
while
다음과 같은 추악한 작업을 수행해야 하는 위치에 대한 질문이 더 많습니다 .
while cmd; [ "$?" -ne 0 ]; do
...
done
이것이 더 좋아 보인다:
until cmd; do
...
done
ksh
(및 이를 채택한 POSIX(및 bash/zsh...))를 사용하면 sh
다음을 수행할 수 있습니다.
if ! cmd; then
something if cmd fails
fi
while ! cmd; do
...
done
이 과정에서 종료 상태의 정확한 값을 잃어버리게 됩니다.
답변2
항상 적어도 한 번의 반복을 실행할 때까지. 조건 A가 충족되는 상황을 고려하십시오.
While A is not met:
run X
X를 실행하지 않습니다. 하지만:
do
run X
until A is met
X를 한 번 실행한 후 A가 만족하는지 평가하고 다음 단계를 계속합니다.