Bash

if 和有什麼不一樣![f哦哦_[F○○[ foo] 而如果[!F哦哦_[!F○○[ ! foo] 在 Bash 中?

  • December 7, 2020

我知道這!用於否定 Bash 中的 if 條件,但我剛剛看到採用以下格式的程式碼:

if ! [[ CONDITION ]]; then
   SOMETHING
fi

這種格式和下面的有區別嗎?

if [[ ! CONDITION ]]; then
   SOMETHING
fi

我試過Google,但還沒有找到關於前一種語法的任何東西。

對於單一條件,它們都是相同的:

$ if [[ ! 1 = 1 ]]; then echo true; else echo false; fi
false
$ if ! [[ 1 = 1 ]]; then echo true; else echo false; fi
false

測試多個條件時會有所不同:

$ 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

因此外部否定對結果具有更高的優先級。

當然,您可以對整個條件應用內部否定,因此在這種情況下,您更願意使用外部否定:

$ if  [[ ! ( 1 = 2 || 2 = 2 ) ]]; then echo true; else echo false; fi
false

引用自:https://unix.stackexchange.com/questions/620260