在 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 )) 。
- Bash 只能对整数进行操作。试试这样做:
(( 5 / 2 )) ,你会得到 2 ;或者这样 (( 2.5 & 7 )) ,但会得到一个错误。然后,在按位操作中使用除了整数之外的任何东西(这就是我们现在所讨论的)通常是你不应该做的事情。
提示: 如果你想看看十进制数字在二进制下会是什么样子,你可以使用 bc ,这是一个大多数 Linux 发行版都预装了的命令行计算器。比如:
bc <<< "obase=2; 97"
这个操作将会把 97 转换成十二进制(obase 中的 o 代表 “output” ,也即,“输出”)。
bc <<< "ibase=2; 11001011"
这个操作将会把 11001011 转换成十进制(ibase 中的 i 代表 “input”,也即,“输入”)。
&& 是一个逻辑运算符
虽然它使用与其按位表达相同的逻辑原理,但 Bash 的 && 运算符只能呈现两个结果:1 (“真值”)和0 (“假值”)。对于 Bash 来说,任何不是 0 的数字都是 “真值”,任何等于 0 的数字都是 “假值”。什么也是 “假值”同时也不是数字呢:
$ echo $(( 4 && 5 )) # 两个非零数字,两个为 true = true 1 $ echo $(( 0 && 5 )) # 有一个为零,一个为 false = false 0 $ echo $(( b && 5 )) # 其中一个不是数字,一个为 false = false 0
与 && 类似, OR 对应着 || ,用法正如你想的那样。
以上这些都很简单……直到它用在命令的退出状态时。
&& 是命令退出状态的逻辑运算符
正如我们在之前的文章中看到的,当命令运行时,它会输出错误消息。更重要的是,对于今天的讨论,它在结束时也会输出一个数字。此数字称为“返回码”,如果为 0,则表示该命令在执行期间未遇到任何问题。如果是任何其他数字,即使命令完成,也意味着某些地方出错了。
(编辑:ASP站长网)
|