Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
而变量不等于x或y bash_Bash_Syntax - Fatal编程技术网

而变量不等于x或y bash

而变量不等于x或y bash,bash,syntax,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

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

的未加引号的右侧=[[…]]
内部的code>操作符被视为一个模式。嗯,差不多了。(我混淆了常规模式和扩展模式。)谢谢切普纳,我使用了你的第二个报价,非常有效。但我不明白它是怎么工作的,因为数字是不分开的。为什么BASH解释器认为它是1和2而不是12?