web-dev-qa-db-ja.com

ユーザー入力をwhileループ条件として使用する方法

私はこれをbashで行うことができます:

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

動作しますが少し冗長に見えますが、代わりにこのようなことをすることはできますか?

while [[ `read -n1 -r -p "choose [y]es|[n]o"` != q ]]
do
    #whatever
done
4
razzak

readの戻りコードは使用できません(有効な空でない入力を取得するとゼロになります)。また、その出力を使用できません(readは何も出力しません)。しかし、whileループの条件部分に複数のコマンドを置くことができます。 whileループの条件は、好きなだけ複雑なコマンドにすることができます。

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

(これは、入力がqの場合、またはファイルの終わり条件が検出された場合にループを終了します。)