8.4 运算符优先级

在脚本中,运算执行的顺序被称为优先级: 高优先级的操作会比低优先级的操作先执行。

表 8-1. 运算符优先级(从高到低)

运算符

含义

注解

var++ var--

后缀自增/自减

C风格运算符

++var --var

前缀自增/自减

! ~

按位取反/逻辑取反

对每一比特位取反/对逻辑判断的结果取反

**

幂运算

算数运算符

* / %

乘, 除, 取余

算数运算符

+ -

加, 减

算数运算符

<< >>

左移, 右移

比特位运算符

-z -n

一元比较

字符串是/否为空

-e -f -t -x, etc

一元比较

文件测试

-lt -gt -le -ge <= >=

复合比较

字符串/整数比较

-nt -ot -ef

复合比较

文件测试

&

AND(按位与)

按位与操作

^

XOR(按位异或)

按位异或操作

|

OR(按位或)

按位或操作

&& -a

AND(逻辑与)

逻辑与, 复合比较

|| -o

OR(逻辑或)

逻辑或, 复合比较

? :

if/else三目运算符

C风格运算符

=

赋值

不要与test中的等号混淆

*= /= %= += -= <<= >>= &=

赋值运算

先运算后赋值

,

逗号运算符

连接一系列语句

实际上,你只需要记住以下规则就可以了:

  • 先乘除取余,后加减,与算数运算相似

  • 复合逻辑运算符,&&, ||, -a, -o 优先级较低

  • 优先级相同的操作按从左至右顺序求值

现在,让我们利用运算符优先级的知识来分析一下Fedora Core Linux中的/etc/init.d/functions文件。

tip为了避免在复杂比较运算中的错误,可以把运算分散到几个括号结构中。

Last updated

Was this helpful?