最全面的Shell比較運算子總結
阿新 • • 發佈:2020-08-08
比較運算子分類:
- = 符號,僅用於字串比較,與==等價
- 字元型表示:大於:-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" ]] #錯誤