![如何使用用户输入作为 while 循环条件](https://linux22.com/image/72568/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5%E4%BD%9C%E4%B8%BA%20while%20%E5%BE%AA%E7%8E%AF%E6%9D%A1%E4%BB%B6.png)
我可以在 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
(如果它获得有效的非空输入,则返回代码为零),并且您不能使用其输出(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