如何使用用户输入作为 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(如果它获得有效的非空输入,则返回代码为零),并且您不能使用其输出(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

相关内容