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