如果有什么区别![[ foo ]] 并且如果 [[ ! foo ]] 在 Bash 中?

Lou*_*Lou 1 bash shell-script syntax

我知道这!用于否定 Bash 中的 if 条件,但我刚刚看到采用以下格式的代码:

if ! [[ CONDITION ]]; then
    SOMETHING
fi
Run Code Online (Sandbox Code Playgroud)

这种格式和下面的格式有区别吗?

if [[ ! CONDITION ]]; then
    SOMETHING
fi
Run Code Online (Sandbox Code Playgroud)

我试过谷歌,但还没有找到任何关于以前的语法。

αғs*_*нιη 5

对于单一条件,它们都是相同的:

$ if [[ ! 1 = 1 ]]; then echo true; else echo false; fi
false
$ if ! [[ 1 = 1 ]]; then echo true; else echo false; fi
false
Run Code Online (Sandbox Code Playgroud)

测试多个条件时会出现差异:

$ if  [[ ! 1 = 2 || 2 = 2 ]]; then echo true; else echo false; fi
true
$ if  ! [[ 1 = 2 || 2 = 2 ]]; then echo true; else echo false; fi
false
Run Code Online (Sandbox Code Playgroud)

所以外部否定对结果有更多的优先权。

当然,您可以对整个条件应用内部否定,因此在这种情况下,您将更喜欢使用外部否定:

$ if  [[ ! ( 1 = 2 || 2 = 2 ) ]]; then echo true; else echo false; fi
false
Run Code Online (Sandbox Code Playgroud)