6.5 shell算术

评论 0 浏览 0 2023-01-26

shell允许计算算术表达式,作为shell的扩展之一,或者使用((复合命令、let内置命令或declare内置命令的-i选项。

计算是在不检查溢出的固定宽度整数中完成的,尽管除以 0 会被捕获并标记为错误。 运算符及其优先级、结合性和值与 C 语言中的相同。 以下运算符列表按优先级相等的运算符级别进行分组。 级别按优先级递减的顺序列出。

id++ id--

变量后递增和后递减

++id --id

变量预递增和预递减

- +

一元减号和加号

! ~

逻辑和按位取反

**

求幂

* / %

乘法、除法、余数

+ -

加法、减法

<< >>

左右移位

<= >= < >

比较

== !=

相等与不相等

&

按位与

^

按位异或

|

按位或

&&

逻辑与

||

逻辑或

expr ? expr : expr

条件运算符

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

赋值

expr1 , expr2

逗号

允许Shell变量作为操作数;参数扩展在计算表达式之前执行。在表达式中,shell变量也可以通过名称来引用,而不使用参数扩展语法。在不使用参数扩展语法的情况下按名称引用时,为 null 或未设置的 shell 变量的计算结果为 0。当变量被引用时,或者当使用‘declare -i’给变量赋予integer属性时,变量的值会作为一个算术表达式求值。空值的计算结果为 0。shell变量不需要打开integer属性就可以在表达式中使用。

整数常量遵循C语言的定义,没有后缀或字符常量。以 0 开头的常量被解释为八进制数。 前导‘0x’或‘0X’表示十六进制。否则,数字采取[base#]n的形式,其中可选的base是2到64之间的十进制数字,表示算术基数,而n是该基数的一个数字。 如果省略了base#,则使用基数10。当指定n时,如果需要一个非数字,大于9的数字由小写字母、大写字母、‘’和‘_’依次表示。 如果base小于或等于36,小写字母和大写字母可以互换使用,表示10到35之间的数字。

运算符按优先顺序进行评估。 括号中的子表达式首先被评估,并且可以覆盖上面的优先级规则。

最后更新2023-02-20
0 个评论
下一篇: 6.6 别名
当前页面书签