在 Bash 中,你可以使用 & 作为 AND(逻辑和)操作符。
有人可能会认为两篇文章中的 &
意思差不多,但实际上并不是。虽然 第一篇文章讨论了如何在命令末尾使用 & 来将命令转到后台运行,在之后剖析了流程管理,第二篇文章将 & 看作引用文件描述符的方法,这些文章让我们知道了,与 结合使用后,你可以将输入或输出引导到别的地方。
但我们还没接触过作为 AND 操作符使用的 &
。所以,让我们来看看。
& 是一个按位运算符
如果你十分熟悉二进制数操作,你肯定听说过 AND 和 OR 。这些是按位操作,对二进制数的各个位进行操作。在 Bash 中,使用 &
作为 AND 运算符,使用 |
作为 OR 运算符:
AND:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
OR:
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
你可以通过对任何两个数字进行 AND 运算并使用 echo
输出结果:
$ echo $(( 2 & 3 )) # 00000010 AND 00000011 = 00000010
2
$ echo $(( 120 & 97 )) # 01111000 AND 01100001 = 01100000
96
OR(|
)也是如此:
$ echo $(( 2 | 3 )) # 00000010 OR 00000011 = 00000011
3
$ echo $(( 120 | 97 )) # 01111000 OR 01100001 = 01111001
121
说明:
(( ... ))
告诉 Bash 双括号之间的内容是某种算术或逻辑运算。(( 2 + 2 ))
、 (( 5 % 2 ))
(%
是求模运算符)和 ((( 5 % 2 ) + 1))
(等于 3)都可以工作。$
提取值,以便你可以使用它。((2+3))
等价于 (( 2+3 ))
和 (( 2 + 3 ))
。(( 5 / 2 ))
,你会得到 2
;或者这样 (( 2.5 & 7 ))
,但会得到一个错误。然后,在按位操作中使用除了整数之外的任何东西(这就是我们现在所讨论的)通常是你不应该做的事情。提示: 如果你想看看十进制数字在二进制下会是什么样子,你可以使用 bc
,这是一个大多数 Linux 发行版都预装了的命令行计算器。比如:
bc