Разница между "while" и "until" в Bash

В чем разница между временем и до?

Я хотел бы знать, возможно ли сделать цикл с циклом "пока" и нисходящий цикл 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

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

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

Ответы

Ответ 2

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

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

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

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

Ответ 3

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

bool b;
while(b) = until(!b)

Ответ 4

Btw:

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

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

Ответ 5

В основном, в то время как & До тех пор, пока циклы не будут выполнены, только если выполнено начальное условие, подумайте о циклах while, а если только текущее условие выполнено, то оно будет работать. Однако пока циклы не будут ждать, пока условие не будет выполнено. Например. Следующее будет работать, потому что 5 меньше 10, тело цикла увеличивает значение до тех пор, пока оно не достигнет ровно десяти.

index=5
until [ $index -gt 10 ]
do
  echo $index
  let index+=1
done

Этот пример не будет работать, потому что 5 изначально не больше 10, только во время цикла оно становится больше.

index=5
while [ $index -gt 10 ]
do
  echo $index
  let index+=1
done