Eu sei o que é um while
loop. No entanto, eu só vi isso funcionar com:
while [condition]
while ![condition]
while TRUE (infinite loop)
Onde a declaração depois while
deve ser TRUE
ou FALSE
.
Há um comando interno do shell chamado :
. É descrito como um comando fictício sem fazer nada, mas não sei se é o mesmo aqui, mesmo que possa ser TRUE
ou FALSE
. Talvez seja algo diferente, mas o que?
bash
shell-script
tubarão
fonte
fonte
:
não faz nada, mas sempre sai com o código de retorno 0. Portanto, é o mesmo que erawhile true
(assumindo que seu sistema possui umtrue
executável).:
comando nunca for executado, ele não retornará 0. Isso é excessivamente pedante na minha opinião.Respostas:
A sintaxe é:
que executa a segunda lista de comandos em um loop desde que a primeira lista de comandos (portanto, a última execução nessa lista) seja bem-sucedida.
Na primeira lista de comandos , você pode usar o
[
comando para fazer vários tipos de testes ou o:
comando nulo que não faz nada e retorna sucesso, ou qualquer outro comando.Corre
cmd
repetidamente para sempre, como:
sempre retorna sucesso. Esse é o laço eterno . Você poderia usar otrue
comando para torná-lo mais legível:As pessoas costumavam preferir o
:
que:
sempre foi construído, enquantotrue
não era (há muito tempo; a maioria das conchas já foitrue
construída hoje em dia) ¹.Outras variantes que você pode ver:
Acima, chamamos o
[
comando para testar se a sequência "1" não está vazia (portanto, sempre também verdadeira)Usando a
((...))
sintaxe Korn / bash / zsh para imitar owhile(1) { ...; }
de C.Ou as mais complicadas gosto
until false; do cmd; done
,until ! true
...Às vezes, esses são apelidos como:
So you can do something like:
Poucas pessoas percebem que a condição é uma lista de comandos. Por exemplo, você vê pessoas escrevendo:
Quando eles poderiam ter escrito:
Faz sentido que seja uma lista, pois muitas vezes você também deseja fazer coisas como
while cmd1 && cmd2; do...; done
listas de comandos.De qualquer forma, observe que
[
é um comando como outro qualquer (embora esteja embutido em shells modernos do tipo Bourne), ele não precisa ser usado apenas nas listas de condiçõesif
/while
/until
e essas listas de condições não têm para usar esse comando mais do que qualquer outro comando.Also
:
também é mais curto e aceita argumentos (que são ignorados). Enquanto o comportamento detrue
oufalse
não for especificado, se você passar algum argumento. Então, pode-se fazer, por exemplo:Mas, o comportamento de:
não é especificado (embora funcione na maioria das shell /
false
implementações).fonte
while :
é um loop infinito.:
simplesmente não faz nada (com sucesso).Portanto, se você deseja que seu shell fique pendurado para sempre sem fazer nada, você pode escrevê-lo como
Ou em uma única linha com, em
;
vez de novas linhas:while :; do :; done
while :
é geralmente usado se você deseja fazer algo repetidamente sem uma condição especial anexada. É possível utilizarcontinue
,break
declarações dentro do circuito para controlar ou para mover a condição para o fim do laço como umado ... while
construo.fonte
Não, o comando na parte da condição pode ser qualquer comando (*) . Todos os comandos do shell têm algum valor de retorno, e o
while
loop (assim como oif
condicional) assume valores de retorno de zero como "true" e todos os outros como "false". (* ou uma lista de vários comandos, o último conta)Quanto
:
, manual do Bash diz claramente que o status de retorno que é:O
help
builtin é ainda mais claro:fonte
s/any command/any sequence of commands/
, como Stéphane deixa claro.