Я знаю, что такое while
петля. Тем не менее, я видел только это работает с:
while [condition]
while ![condition]
while TRUE (infinite loop)
Где утверждение while
должно быть либо TRUE
или FALSE
.
Существует встроенная команда оболочки с именем :
. Это описывается как фиктивная команда, которая ничего не делает, но я не знаю, является ли она здесь такой же, даже если это может быть TRUE
или FALSE
. Может быть, это что-то другое, но что?
bash
shell-script
sharkant
источник
источник
:
ничего не делает, но всегда завершается с кодом возврата 0. Таким образом, то же самое былоwhile true
(при условии, что ваша система имеетtrue
исполняемый файл).:
команда никогда не будет выполнена, она не вернет 0. Это, на мой взгляд, слишком педантично.Ответы:
Синтаксис:
который запускает второй список команд в цикле, пока первый список команд (то есть последний запуск в этом списке) является успешным.
В этом первом списке команд вы можете использовать
[
команду для выполнения различных видов тестов, или вы можете использовать команду:
null, которая ничего не делает и возвращает успех, или любую другую команду.Работает
cmd
снова и снова навсегда, как:
всегда, возвращает успех. Это вечная петля.true
Вместо этого вы можете использовать команду, чтобы сделать ее более разборчивой:Люди предпочитали,
:
как:
всегда было встроено, в то время какtrue
не было (давным-давно; большинство оболочек построено в настоящееtrue
время) ¹.Другие варианты, которые вы можете увидеть:
Выше мы вызываем
[
команду, чтобы проверить, не является ли строка «1» непустой (так всегда всегда верно)Использование
((...))
синтаксиса Korn / bash / zsh для имитацииwhile(1) { ...; }
C.Или более запутанные, как
until false; do cmd; done
,until ! true
...Те иногда псевдонимы как:
Таким образом, вы можете сделать что-то вроде:
Мало кто понимает, что условие - это список команд. Например, вы видите людей, пишущих:
Когда они могли написать:
Для этого имеет смысл быть списком, так как вы часто хотите делать такие вещи, как
while cmd1 && cmd2; do...; done
списки команд.В любом случае, обратите внимание, что
[
это команда, как и любая другая (хотя она встроена в современные оболочки типа Борна), ее не нужно использовать исключительно в списках условийif
/while
/until
, и эти списки условий не имеют использовать эту команду больше, чем любую другую команду.Also
:
также короче и принимает аргументы (которые он игнорирует). Пока поведениеtrue
илиfalse
не указано, если вы передаете ему какой-либо аргумент. Так, например, можно сделать:Но поведение:
не определено (хотя это будет работать в большинстве оболочек /
false
реализаций).источник
while :
это бесконечный цикл.:
просто ничего не делает (успешно).Так что если вы хотите, чтобы ваша оболочка зависала вечно, ничего не делая, вы можете написать
Или в одной строке
;
вместо новых строк:while :; do :; done
while :
обычно используется, если вы хотите сделать что-то несколько раз без специальных условий. Вы можете использоватьcontinue
,break
оператор внутри цикла , чтобы контролировать его или переместить условие в конец цикла , какdo ... while
конструкция.источник
Нет, команда в части условия может быть любой командой (*) . Все команды оболочки имеют некоторое возвращаемое значение, и
while
цикл (как иif
условный) принимает нулевые возвращаемые значения как «true», а все остальные как «false». (* или список из нескольких команд, последняя считается)Что касается
:
, руководство в Bash ясно говорит , что статус возврата , который:help
Встроенная еще более ясно:источник
s/any command/any sequence of commands/
Стефан ясно дает понять.