使用或运算符的类似测试表达式?

Ale*_*lls 1 bash shell-script test

只是想知道这是否:

if [ "$first_arg" == "major" ] || [ "$first_arg" == "minor" ]; then
        exit 1;
fi
Run Code Online (Sandbox Code Playgroud)

与此相同:

if [ "$first_arg" == "major" || "$first_arg" == "minor" ]; then
      exit 1;
fi
Run Code Online (Sandbox Code Playgroud)

小智 5

他们不一样。事实上[ "$first_arg" == "major" || "$first_arg" == "minor" ]甚至不是一个有效的表达。

这是因为[是一个等价于的命令,test他们不能使用||替代命令,它在命令间级别运行。历史上认为对替代方案正确的是-o,但现在它被 POSIX 1标记为过时,建议重写

test "$1" -o "$2"
Run Code Online (Sandbox Code Playgroud)

进入

test "$1" || test "$2"
Run Code Online (Sandbox Code Playgroud)

除了testand[结构之外,还有“现代”[[测试命令,它不完全接受-o,而是接受||.

因此,所有这些都是有效且等效的:

  1. 一项[[测试:

    if [[ $first_arg == major || $first_arg == minor ]]; then
        exit 1;
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  2. 两个[[测试:

    if [[ $first_arg == major ]] || [[ $first_arg == minor ]]; then
        exit 1;
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  3. 两个[测试(标准等效项):

    if [ "$first_arg" = major ] || [ "$first_arg" = minor ]; then
        exit 1;
    fi
    
    Run Code Online (Sandbox Code Playgroud)

$first_arg里面不需要双引号[[,因为那里没有分词或路径名扩展。但是,引号应该与 一起使用[。引用minor也没有意义major。不仅在这里,而且与test[也一起。那是因为它们是简单的字符串。

1. 见应用使用。