[英]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" ]
ans
是a
那么它将为false || true
false || true
正确。 ans
是b
那么它将变为true || false
true || false
,这是真的。 ans
是x
则它变为true || true
true || true
正确。 您想要&&
而不是||
。 另外,也可以进行一次比较: [[ "$ans" != [aAbBcC] ]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.