sh 脚本中具有 3 个或更多表达式的布尔值

booleans with 3 or more expressions in sh script

如何将 "OR" 和 "AND" 与 3 个或更多表达式结合起来?为此我需要它:

(X 或 Y 或 Z)和 M

这是正确的吗?

 if [ ["" = "X" -o "" = "Y" -o "" = "Z"] -a "" = "M"]   
     then       
        echo "correct"
        exit 1  
     fi

A shell 实现不需要使用 -o-a 作为布尔组合器,POSIX 规范不鼓励使用它们。相反,使用 ||&& 加入 [.

的多个调用
if { [ "" = "X" ] || [ "" = "Y" ] || [ "" = "Z" ]; } && [ "" = "M" ]; then
    echo "correct"
    exit 1
fi

请注意,[ 是一个命令(test 的别名),而不是分组运算符,因此您不能像示例中那样简单地嵌套它们。事实上,] 没有实际用途; [ 只需要它来完成幻觉。以上与

相同
if { test "" = "X" || test "" = "Y" || test "" = "Z"; } && test "" = "M"; then
    echo "correct"
    exit 1
fi