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

答え2

簡単な読み出しと割り込みにより実現

while read release; do
 if [ "$release" == "07" ]; then
        break
 else
        echo "Is that current release? e.g: 05. Try again!"
        continue
 fi
done

関連情報