我试图获得用户输入。 输入应为" 1"或" 2"。 出于某种原因,即使我输入1或2,我仍然会得到提示。
read -p "Your choice: " UserChoice
while [[ "$UserChoice" != "1" || "2" ]]
do
echo -e "\nInvalid choice please choose 1 or 2\n"
read -p "Your choice: " UserChoice
done
我很感激你的帮助 谢谢!
答案 0 :(得分:18)
!=
不会分发||
,它会加入两个完整的表达式。修复后,您还需要使用&&
代替||
。
while [[ "$UserChoice" != "1" && "$UserChoice" != "2" ]]
实际上,bash
确实支持模式匹配,可以与您的想法类似地使用。
while [[ $UserChoice != [12] ]]
设置extglob
选项(默认情况下,在bash 4.2中从[[ ... ]]
开启,我相信),你可以使用非常接近你原来的东西:
while [[ $UserChoice != @(1|2) ]]