Como usar a entrada do usuário como uma condição de loop while

3

Eu posso fazer isso no bash:

while read -n1 -r -p "choose [y]es|[n]o"
do
    if [[ $REPLY == q ]];
    then
        break;
    else
        #whatever
    fi
done

que funciona, mas parece um pouco redundante, posso fazer algo assim?

while [[ 'read -n1 -r -p "choose [y]es|[n]o"' != q ]]
do
    #whatever
done
    
por razzak 08.09.2015 / 00:50

1 resposta

5

Você não pode usar o código de retorno de read (é zero se ele for válido, entrada não vazia) e você não pode usar sua saída ( read não imprime nada). Mas você pode colocar vários comandos na parte de condição de um loop while. A condição de um loop while pode ser um comando tão complexo quanto você desejar.

while read -n1 -r -p "choose [y]es|[n]o" && [[ $REPLY != q ]]; do
  case $REPLY in
    y) echo "Yes";;
    n) echo "No";;
    *) echo "What?";;
  esac
done

(Isso encerra o loop se a entrada for q ou se uma condição de fim de arquivo for detectada).

    
por 08.09.2015 / 01:22