Синтаксис:
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исполняемый файл).