"while"의 부정적인 버전일 뿐인데 "until" 블록을 디자인하는 이유는 무엇입니까?

"while"의 부정적인 버전일 뿐인데 "until" 블록을 디자인하는 이유는 무엇입니까?

제가 알기로는 untilblock은 의 반대 버전입니다 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가 만족하는지 평가하고 다음 단계를 계속합니다.

관련 정보