而变量不等于x或y bash

时间:2014-09-16 20:14:13

标签: bash syntax

我试图获得用户输入。 输入应为" 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

我很感激你的帮助 谢谢!

1 个答案:

答案 0 :(得分:18)

!=不会分发||,它会加入两个完整的表达式。修复后,您还需要使用&&代替||

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

实际上,bash确实支持模式匹配,可以与您的想法类似地使用。

while [[ $UserChoice != [12] ]]

设置extglob选项(默认情况下,在bash 4.2中从[[ ... ]]开启,我相信),你可以使用非常接近你原来的东西:

while [[ $UserChoice != @(1|2) ]]