我正在尝试获取用户输入。
输入应为“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

多谢您的协助
谢谢!

最佳答案

!=不会分布在||上,后者将两个完整的表达式连接在一起。解决此问题后,您还需要使用&&而不是||

while [[ "$UserChoice" != "1" && "$UserChoice" != "2" ]]

实际上,bash确实支持模式匹配,可以与您所想到的类似地使用它。
while [[ $UserChoice != [12] ]]

设置了extglob选项(我相信默认情况下,它从bash 4.2开始在[[ ... ]]中处于启用状态),您可以使用非常接近最初的设置:
while [[ $UserChoice != @(1|2) ]]

关于bash - 而变量不等于x或y bash,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25877637/

10-12 15:42