运行下面的代码时,我想读取用户输入的答案,直到它是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
它应该循环读取,直到给出一个可接受的答案为止;然后应继续以下代码(如果有)。
答案 0 :(得分:2)
您的循环条件始终为真,并且Bash永远循环正确。
考虑简化版本:
[ "$ans" != "a" ] || [ "$ans" != "b" ]
ans
为a
,则它变为false || true
,这是正确的。ans
为b
,则它变为true || false
,这是正确的。ans
为x
,则它变为true || true
,这是正确的。您想要&&
而不是||
。另外,也可以一次比较:[[ "$ans" != [aAbBcC] ]]