1. 程式人生 > 實用技巧 >最全面的Shell比較運算子總結

最全面的Shell比較運算子總結

比較運算子分類:

  • = 符號,僅用於字串比較,與==等價
  • 字元型表示:大於:-gt, 小於:-lt,大於等於:-ge, 小於等於:-le, 不等於:-ne,等於:-eq,
  • 符號表示: 大於:> ,小於:< , 大於等於:>= , 小於等於:<= , 不等於:!= ,等於:==
  • 字串正則匹配:=~

常用形式:

  • 用於單中括號[ ]中, 變數需要使用使用'$'符號,含 > 和 < 的符號時,需要使用'\'進行轉義
if [ $a \> $b ]   
  • 用於雙中括號[[ ]]中,變數需要使用使用'$'符號,比較運算子符號不需要轉義(推薦使用)
if [[ $a > $b]]   
  • 用於雙小括號(( ))中,變數可以不使用'$'符號,不需要使用轉義,在代數比較時,只能用於整數比較(與C語言for迴圈中的判斷條件語法相同)
if ((a > b))   

字串的比較

  • 一般使用,!= 、==(或 =)、=~ ,分別表示:不等於、等於 和 正則匹配(成功匹配返回 1)
  • 偶爾使用:> 和 < , 其含義是比較字元的ascii編碼大小
  • 使用test進行字串比較,僅能使用 == 和 != 符號, == 可以簡化為 =
  • 字串正則匹配:=~, 一般放在[[]]中,可避免轉義,注意:左右兩邊必須有空格,且右邊不要使用引號,否則會匹配失敗

整數比較

  • -gt, -lt,-ge,-le, -eq, -ne, 僅適用於\(\color{blue}{整數}\),且比較運算子左右兩邊必須有空格,否則會被整體視為一個字串(非空字串,恆為正)
a=2
b=1
[[ "$a"-gt"$b" ]]     #返回 1, 因為當成一個整體字串,非空
[[ "$a"-lt"$b" ]]     #返回 1, 因為當成一個整體字串,非空

[[ "$a" -gt "$b" ]]   #返回 1,因為 2 > 1
[[ "$a" -lt "$b" ]]   #返回 0,因為 2 > 1

[[ "$a" -lt"$b" ]]   #報錯,缺少比較運算子,因為 把$a 和 -lt$b當成了2個字串
[[ "$a"-lt "$b" ]]   #報錯,同上

a=2.2
b=1.1
[[ "$a"-gt"$b" ]]     #返回 1, 因為當成一個整體字串,非空
[[ "$a"-lt"$b" ]]     #返回 1, 因為當成一個整體字串,非空

[[ "$a" -gt "$b" ]]   #報錯[[: 2.2: syntax error: invalid arithmetic operator (error token is ".2"),因為識別不了2.2為整數
[[ "$a" -lt "$b" ]]   #報錯, 同上
  • 使用 > ,< ,>= , <= , != ,== 時,運算子左右兩邊可以使用空格,也可以不使用空格

小數比較

  • 僅能使用使用 > ,< ,>= , <= , != ,== 時,運算子左右兩邊不可以使用空格
[ "$a"\>="$b" ]       #正確
[ "$a" \>= "$b" ]     #錯誤

[[ "$a">="$b" ]]      #正確
[[ "$a" >= "$b" ]]    #錯誤

參考連結