Bash

Bash:雙等於 vs -eq

  • October 23, 2017

我在 bash 中進行整數比較(試圖查看使用者是否以 root 身份執行),我發現了兩種不同的方法:

雙等於:

if [ $UID == 0 ]
then
fi

-eq

if [ $UID -eq 0 ]
then
fi

我知道 bash 中沒有 >= 或 <=,只有 -ge 和 -le,那麼==如果有 a ,為什麼還有 a -eq

它比較雙方的方式有什麼不同嗎?

==是 的bash- 特定別名=,它執行字元串(詞法)比較而不是-eq數字比較。(它從 Perl 倒過來:單詞風格的運算符是數字的,符號運算符是詞彙的。)

詳細說明博洛文的答案……

字元串沒有&gt;=&lt;=比較運算符。但是您可以將它們與((...))算術命令一起使用來比較整數。

如果您在內部使用它們,您還可以使用其他字元串比較運算符(==, !=, &lt;, &gt;, 但不是=)來比較整數((...))

例子

  • 兩者都[[ 01 -eq 1 ]]進行(( 01 == 1 ))整數比較。兩者都是真實的。
  • 兩者都[[ 01 == 1 ]]進行[ 01 = 1 ]字元串比較。兩者都是假的。
  • 兩者都(( 01 -eq 1 ))(( 01 = 1 ))返回錯誤。

注意:並非所有 shell 都支持雙括號語法[[...]]和雙括號語法。((...))

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