Colchetes simples no shell é sinônimo de test
(o comando separado ou o shell interno), portanto, [ 0 ]
significa a mesma coisa que test 0
. test
é para fazer comparações e testar os atributos dos arquivos, como você pode ler na manpage. Quando não é dada uma expressão que parece uma comparação, teste de arquivo ou uma das outras operações que ele pode fazer, ele irá testar se o argumento está presente e uma string não vazia. Nem 0
ou 1
são entradas realmente apropriadas para teste, e como o teste de cadeias não vazias simplesmente é bem-sucedido e o loop while executa loops para sempre.
Você pode tentar em vez disso
while false; do
echo "hello"
done
possivelmente substituindo false
por true
. Ou talvez o que você queira é usar (( ))
:
while (( 0 )); do
echo "hello"
done
O que se comportará como a maioria dos idiomas, em que 0 significa falha / falsa e 1 significa sucesso / verdade.