如何使用用户输入作为 while 循环条件

raz*_*zak 4 shell bash control-flow test read

我可以在 bash 中做到这一点:

while read -n1 -r -p "choose [y]es|[n]o"
do
    if [[ $REPLY == q ]];
    then
        break;
    else
        #whatever
    fi
done
Run Code Online (Sandbox Code Playgroud)

这有效但似乎有点多余,我可以做这样的事情吗?

while [[ `read -n1 -r -p "choose [y]es|[n]o"` != q ]]
do
    #whatever
done
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 8

您不能使用的返回代码read(如果它获得有效的非空输入,则为零),并且您不能使用其输出(read不打印任何内容)。但是您可以在 while 循环的条件部分中放置多个命令。while 循环的条件可以与您喜欢的命令一样复杂。

while 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
Run Code Online (Sandbox Code Playgroud)

(如果输入是q或检测到文件结束条件,则退出循环。)