((...))
语法可以进行整数的算术运算。
注意
- 只要算术结果不是 0 ,命令就算执行成功
- bash 只能计算整型
- 运算的类型结果是向下取整的整型
支持算术运算符
+
-
*
/
%
余**
指数++
自增(前缀或后缀)--
自减(前缀或后缀)
((foo=1+2))
# 运算中计算变量
((foo++))
((foo=foo+3))
Bash 默认是十进制,但是算术表达式中,可以用其他进制,格式如下:
number
没有任何特殊表示法的数字是十进制0number
八进制0xnumber
十六进制base#number
base
进制的数
<<
位左移>>
位右移&
按位“与” 解释:3&10 只要对应的两个二进位都为 1 时,结果位就为 1,可写算式如下: 00000011&00001010 00000010 十进制 2|
按位“或” 解释:只要对应的二个二进位有一个为 1 时,结果位就为1。参与运算的两个数均以补码出现。 9|5可写算式如下: 00001001|00000101 00001101 十进制为 13~
对一个数字按位取反 解释:https://segmentfault.com/q/1010000005697515!
逻辑“否”^
按位异或 解释:参与运算的两个值,如果两个相应位相同,则结果为 0。例如:10100001^00010001=10110000
Bash 支持以下逻辑运算符
<
小于>
大于<=
小于或等于>=
大于或等于==
相等!=
不相等&&
逻辑与||
逻辑或expr?expr2:expr3
三元运算符,expr1
计算结果为非零,则执行表达式expr2
,否则执行表达式expr3
如果逻辑表达式为真,返回1
,否则返回0
。
echo $((3>2))
# 输出 1
算术表达式中,可以执行赋值运算。
foo=5
echo $((foo*=2))
# 输出 10
# 配合三元运算符,赋值变量 a
echo $(( a<1 ? (a+=1) : (a-=1) ))
逗号,
在算术表达式 $((...))
内部是求值运算符,执行前后两个表达式,并返回后一个表达式的值。
echo $$(foo=1+2,3*4)
# 输出 12
echo $foo
# 输出 3
expr
命令支持算术运算,可以不用((...))
语法。
注意空格
expr 3 + 2
foo=3
expr $foo + 2