使用“进制+#+数字”来表示特殊进制:
[~]$ echo $((16#FF))
255
[~]$ echo $((2#11))
3
[~]$ echo $((8#11))
9
也可以使用0或0x表示八进制或十六进制数:
[~]$ echo $((011))
9
[~]$ echo $((0x11))
17
支持以下位运算:
<<
:位左移运算,把一个数字的所有位向左移动指定的位。[~]$ echo $((16<<2))
64
>>
:位右移运算,把一个数字的所有位向右移动指定的位。[~]$ echo $((16>>2))
4
&
:位的“与”运算,对两个数字的所有位执行一个AND
操作。[~]$ echo $((17&3))
1
|
:位的“或”运算,对两个数字的所有位执行一个OR
操作。[~]$ echo $((17|3))
19
~
:位的“否”运算,对一个数字的所有位取反。[~]$ echo $((~17))
-18
!
:逻辑“否”运算
^
:位的异或运算(exclusive or),对两个数字的所有位执行一个异或操作。[~]$ echo $((17^3))
18
支持以下逻辑运算,真为1,假为0:
<
:小于[~]$ echo $((1<0))
0
>
:大于[~]$ echo $((1>0))
1
<=
:小于或相等[~]$ echo $((1<=0))
0
>=
:大于或相等[~]$ echo $((1>=0))
1
==
:相等[~]$ echo $((1==0))
0
!=
:不相等[~]$ echo $((1!=0))
1
&&
:逻辑与[~]$ echo $((1>0 && 2>0))
1
||
:逻辑或[~]$ echo $((1>0 || 2<0))
1
expr1?expr2:expr3
:三元条件运算符。若表达式expr1
的计算结果为非零值(算术真),则执行表达式expr2
,否则执行表达式expr3
。[~]$ echo $((1>0?2:3))
2
基本的赋值操作:
parameter = value
:简单赋值。[~]$ echo $((a=1))
1
[~]$ echo $a
1
parameter += value
:等价于parameter = parameter + value
。[~]$ echo $((a+=1))
2
[~]$ echo $a
2
parameter -= value
:等价于parameter = parameter – value
。[~]$ echo $((a-=1))
1
[~]$ echo $a
1
parameter *= value
:等价于parameter = parameter * value
。[~]$ echo $((a*=2))
2
[~]$ echo $a
2
parameter /= value
:等价于parameter = parameter / value
。[~]$ echo $((a/=2))
1
[~]$ echo $a
1
parameter %= value
:等价于parameter = parameter % value
。[~]$ a=3
[~]$ echo $((a%=2))
1
[~]$ echo $a
1
parameter <<= value
:等价于parameter = parameter << value
。[~]$ echo $((a<<=2))
4
[~]$ echo $a
4
parameter >>= value
:等价于parameter = parameter >> value
。[~]$ echo $((a>>=2))
1
[~]$ echo $a
1
parameter &= value
:等价于parameter = parameter & value
。[~]$ echo $((a&=2))
0
[~]$ echo $a
0
parameter |= value
:等价于parameter = parameter | value
。[~]$ echo $((a|=2))
2
[~]$ echo $a
2
parameter ^= value
:等价于parameter = parameter ^ value
。[~]$ echo $((a^=2))
0
[~]$ echo $a
0
逗号表达式
[~]$ echo $((foo = 1 + 2, 3 * 4))
12
[~]$ echo $foo
3
也可以使用expr命令,不需要使用(()),注意空格
[~]$ expr $foo + 3
6[~]$ expr 3 + 2
5