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 ...