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

ユーザー入力を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

ベストアンサー1

read戻りコード(null以外の有効な入力を受け取ると0)は使用できず、その出力は使用できません(read何も印刷されません)。ただし、whileループの条件付き部分に複数のコマンドを入れることができます。 whileループの条件は、必要に応じて複雑にすることができます。

while IFS= 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(入力がある場合、またはファイル終了条件が検出された場合はループを終了します。)

おすすめ記事