【问题标题】:while variable is not equal to x or y bashwhile 变量不等于 x 或 y bash
【发布时间】:2014-11-10 17:25:57
【问题描述】:

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

感谢您的帮助 谢谢!

【问题讨论】:

    标签: bash syntax


    【解决方案1】:

    != 不分布在 || 上,它连接了两个 complete 表达式。解决此问题后,您还需要使用 && 而不是 ||。

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

    实际上,bash 确实支持模式匹配,可以按照您的想法使用。

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

    使用 extglob 选项集(我相信从 bash 4.2 开始,[[ ... ]] 中默认启用),您可以使用与您最初拥有的非常接近的东西:

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

    【讨论】:

    • 否; != 运算符的未加引号的右侧,在 [[ ... ]] 内,被视为一个模式。嗯。几乎。 (我混合了常规模式和扩展模式。)
    • 感谢 Chepner,我使用了您的第二个报价,效果很好。但我不明白它是如何工作的,因为数字没有分开。为什么 BASH 解释器认为它是 1 和 2 而不是 12?
    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2019-08-18
    • 2020-10-28
    • 1970-01-01
    • 2015-08-05
    相关资源
    最近更新 更多