Разница между «пока» и «пока» в Bash - PullRequest
25 голосов
/ 27 ноября 2011

Какая разница между временем и до?

Я хотел бы знать, возможно ли выполнить цикл с возрастающим числом «до» и нисходящий цикл с помощью while.

Потому что я видел, что если я сделаю это

COUNTER=0
     while [ $COUNTER -lt 10 ]; do
         echo The counter is $COUNTER
         let COUNTER+=1 
     done

и это

COUNTER=20
     until [ $COUNTER -lt 10 ]; do
         echo COUNTER $COUNTER
         let COUNTER-=1
     done

они хорошо работают.

Но если я сделаю обратное, например:

COUNTER=20
     while [ $COUNTER -lt 10 ]; do
         echo COUNTER $COUNTER
         let COUNTER-=1
     done

скрипт не заканчивается.

Означает ли это, что мы не можем сделать обратный цикл с некоторое время в bash?

Ответы [ 4 ]

38 голосов
/ 27 ноября 2011

while запускает цикл , а условие истинно. until запускает цикл до тех пор, пока условие не станет истинным (то есть , в то время как условие будет ложным).

См. http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs.

12 голосов
/ 07 октября 2013

Пока Loop выполняет блок кода (заключенный в do ... done ), когда условие равно true , и продолжает его выполнять до тех пор, пока условие не станет ложь . Как только условие становится false , цикл while завершается.

До тех пор, пока Loop не выполнит блок кода (заключенный в do ... done ), когда условие false , и продолжайте его выполнять до тех пор, пока условие не станет правда . Как только условие становится true , цикл до прекращается.

COUNTER=20
while [ $COUNTER -lt 10 ]; do
    echo COUNTER $COUNTER
    let COUNTER-=1
done

В самом первом случае условие, упомянутое в while, то есть [$ COUNTER -lt 10] , имеет значение false, поэтому блок кода внутри цикла while не будет беги вообще.

6 голосов
/ 27 ноября 2011

Они противоположны:

bool b;
while(b) = until(!b)
4 голосов
/ 27 ноября 2011

Кстати:

COUNTER=20
while [ $COUNTER -lt 10 ]; do
    echo COUNTER $COUNTER
    let COUNTER-=1
done

Это не будет выполняться вечно.Счетчик (20) составляет не менее 10 во время первой оценки состояния цикла, поэтому он немедленно завершится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...