Em while [ false ]
, o false
não é um comando nem um valor booleano. O while
espera um comando, mas [ ... ]
sem operadores apenas verifica se há alguma cadeia não vazia. Assim, [ false ]
é verdadeiro. É nesse sentido o mesmo que [ faaaalseeee ]
.
O que você quis dizer é:
while true; do ...
while false; do ...