1.位运算
$((...))
支持以下的二进制位运算符。<<
:位左移运算,把一个数字的所有位向左移动指定的位。>>
:位右移运算,把一个数字的所有位向右移动指定的位。&
:位的“与”运算,对两个数字的所有位执行一个AND
操作。|
:位的“或”运算,对两个数字的所有位执行一个OR
操作。~
:位的“否”运算,对一个数字的所有位取反。^
:位的异或运算(exclusive or),对两个数字的所有位执行一个异或操作。
下面是右移运算符
>>
的例子。$ echo $((16>>2)) 4
下面是左移运算符
<<
的例子。$ echo $((16<<2)) 64
下面是
17
(二进制10001
)和3
(二进制11
)的各种二进制运算的结果。$ echo $((17&3)) 1 $ echo $((17|3)) 19 $ echo $((17^3)) 18
2.逻辑运算
$((...))
支持以下的逻辑运算符。<
:小于>
:大于<=
:小于或相等>=
:大于或相等==
:相等!=
:不相等&&
:逻辑与||
:逻辑或!
:逻辑否expr1?expr2:expr3
:三元条件运算符。若表达式expr1
的计算结果为非零值(算术真),则执行表达式expr2
,否则执行表达式expr3
。
如果逻辑表达式为真,返回
1
,否则返回0
。$ echo $((3 > 2)) 1 $ echo $(( (3 > 2) || (4 <= 1) )) 1
三元运算符执行一个单独的逻辑测试。它用起来类似于
if/then/else
语句。$ a=0 $ echo $((a<1 ? 1 : 0)) 1 $ echo $((a>1 ? 1 : 0)) 0
上面例子中,第一个表达式为真时,返回第二个表达式的值,否则返回第三个表达式的值。