Unix shell 比较操作符参考
目录
整数比较
| 操作符 | 说明 | 示例 |
|---|---|---|
-eq | 等于 | if [ "$a" -eq "$b" ] |
-ne | 不等于 | if [ "$a" -ne "$b" ] |
-gt | 大于 | if [ "$a" -gt "$b" ] |
-ge | 大于等于 | if [ "$a" -ge "$b" ] |
-lt | 小于 | if [ "$a" -lt "$b" ] |
-le | 小于等于 | if [ "$a" -le "$b" ] |
< | 小于(在双括号中使用) | (( "$a" < "$b" )) |
<= | 小于等于(在双括号中使用) | (( "$a" <= "$b" )) |
> | 大于(在双括号中使用) | (( "$a" > "$b" )) |
>= | 大于等于(在双括号中使用) | (( "$a" >= "$b" )) |
字符串比较
| 操作符 | 说明 | 示例 |
|---|---|---|
= | 等于 | if [ "$a" = "$b" ] |
== | 等于(与 = 等价) | if [ "$a" == "$b" ] |
!= | 不等于 | if [ "$a" != "$b" ] |
< | 小于,按 ASCII 字符排序 | if [[ "$a" < "$b" ]] 或 if [ "$a" \< "$b" ] |
> | 大于,按 ASCII 字符排序 | if [[ "$a" > "$b" ]] 或 if [ "$a" \> "$b" ] |
-z | 字符串为 null(长度为零) | [ -z "$string" ] |
-n | 字符串不为 null | [ -n "$string" ] |
注意 == 在双中括号对 [[ ]] 和单中括号对 [ ] 中的行为不同:
[[ $a == z* ]]模式匹配:如果$a以”z”开头则为真[[ $a == "z*" ]]字面匹配:$a完全等于字符串”z*”[ $a == z* ]文件扩展匹配(file globbing)和单词分割有效[ "$a" == "z*" ]字面匹配:$a完全等于”z*”
在 [ ] 结构中使用 < 和 > 需要转义(\<、\>),在 [[ ]] 中不需要。
复合条件
| 操作符 | 说明 | 示例 |
|---|---|---|
-a | 逻辑与 | [ "$exp1" -a "$exp2" ] |
-o | 逻辑或 | [ "$exp1" -o "$exp2" ] |
在双中括号 [[ ]] 结构中,逻辑运算符 && 和 || 等同于 -a 和 -o:
[[ condition1 && condition2 ]][[ condition1 || condition2 ]]
-o 和 -a 操作符一般用在 test 命令或单中括号 [ ] 结构中。