Синтаксис:
while
first list of commands
do
second list of commands
done
который запускает второй список команд в цикле, пока первый список команд (то есть последний запуск в этом списке) является успешным.
В этом первом списке команд вы можете использовать [
команду для выполнения различных видов тестов, или вы можете использовать команду :
null, которая ничего не делает и возвращает успех, или любую другую команду.
while :; do cmd; done
Работает cmd
снова и снова навсегда, как :
всегда, возвращает успех. Это вечная петля. true
Вместо этого вы можете использовать команду, чтобы сделать ее более разборчивой:
while true; do cmd; done
Люди предпочитали, :
как :
всегда было встроено, в то время как true
не было (давным-давно; большинство оболочек построено в настоящее true
время) ¹.
Другие варианты, которые вы можете увидеть:
while [ 1 ]; do cmd; done
Выше мы вызываем [
команду, чтобы проверить, не является ли строка «1» непустой (так всегда всегда верно)
while ((1)); do cmd; done
Использование ((...))
синтаксиса Korn / bash / zsh для имитации while(1) { ...; }
C.
Или более запутанные, как 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
списки команд.
В любом случае, обратите внимание, что [
это команда, как и любая другая (хотя она встроена в современные оболочки типа Борна), ее не нужно использовать исключительно в списках условий if
/ while
/ until
, и эти списки условий не имеют использовать эту команду больше, чем любую другую команду.
Also :
также короче и принимает аргументы (которые он игнорирует). Пока поведение true
или false
не указано, если вы передаете ему какой-либо аргумент. Так, например, можно сделать:
while : you wait; do
something
done
Но поведение:
until false is true; do
something
done
не определено (хотя это будет работать в большинстве оболочек / false
реализаций).
:
ничего не делает, но всегда завершается с кодом возврата 0. Таким образом, то же самое былоwhile true
(при условии, что ваша система имеетtrue
исполняемый файл).