在Bash条件中感叹号是在括号内还是在括号内是否重要?

mhu*_*cka 7 bash shell

似乎你可以写一个否定的条件

if ! [[ ... ]]; then
Run Code Online (Sandbox Code Playgroud)

要么

if [[ ! ... ]]; then
Run Code Online (Sandbox Code Playgroud)

是否有理由选择一种或另一种方法,假设操作的语义相同?(即,显然,在第二个版本中,如果...是复合语句并且您不小心将表达式正确分组,那么您最终可能只会否定表达式的第一部分.)

cam*_*ski 9

不,这完全取决于您自己的偏好.下一个命令完全等效:

if [[ $x -ne $y ]]; then
if ! [[ $x -eq $y ]]; then
if [[ ! $x -eq $y ]]; then
Run Code Online (Sandbox Code Playgroud)

您的偏好可能基于不同的条件:

  • if [[ $x -ne $y ]]; then:简单的比较,没有任何复杂性,如普通变量比较.
  • if ! [[ $x -eq $y ]]; then:假设你有一个复杂的if条件,可能是某个函数的结果而不是$x -eq $y.
  • if [[ ! $x -eq $y ]]; then:不必要,使用第一个或第二个,具体取决于您拥有的if条件类型.我永远不会用这个!