繁体   English   中英

不满足条件时,while循环不会退出

[英]while loop does not exit when the condition is not met

当运行下面的代码时,我想读取用户输入的答案,直到它是6个可能的答案( [abcABC] )之一,否则继续下一个循环。

但是,当我输入一个已接受的答案时,它不会退出while循环。

我尝试使用[][[]]作为条件,我尝试将所有条件放入一对方括号中,并尝试使用| || ,他们都没有按预期工作。

while [ "$ans" != "a" ] || [ "$ans" != "A" ] || [ "$ans" != "b" ] || \
      [ "$ans" != "B" ] || [ "$ans" != "c" ] || [ "$ans" != "C" ]; do
    read ans

    case $ans in
      [aA]) echo "aA"         ;;
      [bB]) echo "bB"         ;;
      [cC]) echo "cC"         ;;
      *)    echo "Try again." ;;
    esac
done

它应该循环读取,直到给出可接受的答案之一为止。 然后应继续以下代码(如果有)。

您的循环条件始终为true,Bash会永远正确循环。

考虑一个简化的版本:

[ "$ans" != "a" ] || [ "$ans" != "b" ]
  • 如果ansa那么它将为false || true false || true正确。
  • 如果ansb那么它将变为true || false true || false ,这是真的。
  • 如果ansx则它变为true || true true || true正确。

您想要&&而不是|| 另外,也可以进行一次比较: [[ "$ans" != [aAbBcC] ]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM