设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

Bash中的逻辑和()

发布时间:2019-03-08 13:13 所属栏目:117 来源:Paul Brown
导读:在 Bash 中,你可以使用 作为 AND(逻辑和)操作符。 有人可能会认为两篇文章中的 意思差不多,但实际上并不是。虽然 第一篇文章讨论了如何在命令末尾使用 来将命令转到后台运行,在之后剖析了流程管理,第二篇文章将 看作引用文件描述符的方法,这些文章

Bash 中的逻辑和(&)

在 Bash 中,你可以使用 & 作为 AND(逻辑和)操作符。

有人可能会认为两篇文章中的 & 意思差不多,但实际上并不是。虽然 第一篇文章讨论了如何在命令末尾使用 & 来将命令转到后台运行,在之后剖析了流程管理,第二篇文章将 & 看作引用文件描述符的方法,这些文章让我们知道了,与 <> 结合使用后,你可以将输入或输出引导到别的地方。

但我们还没接触过作为 AND 操作符使用的 &。所以,让我们来看看。

& 是一个按位运算符

如果你十分熟悉二进制数操作,你肯定听说过 AND 和 OR 。这些是按位操作,对二进制数的各个位进行操作。在 Bash 中,使用 & 作为 AND 运算符,使用 | 作为 OR 运算符:

AND:

  1. 0 & 0 = 0
  2. 0 & 1 = 0
  3. 1 & 0 = 0
  4. 1 & 1 = 1

OR:

  1. 0 | 0 = 0
  2. 0 | 1 = 1
  3. 1 | 0 = 1
  4. 1 | 1 = 1

你可以通过对任何两个数字进行 AND 运算并使用 echo 输出结果:

  1. $ echo $(( 2 & 3 )) # 00000010 AND 00000011 = 00000010
  2. 2
  3. $ echo $(( 120 & 97 )) # 01111000 AND 01100001 = 01100000
  4. 96

OR(|)也是如此:

  1. $ echo $(( 2 | 3 )) # 00000010 OR 00000011 = 00000011
  2. 3
  3. $ echo $(( 120 | 97 )) # 01111000 OR 01100001 = 01111001
  4. 121

说明:

  1. 使用 (( ... )) 告诉 Bash 双括号之间的内容是某种算术或逻辑运算。(( 2 + 2 ))(( 5 % 2 ))% 是求模运算符)和 ((( 5 % 2 ) + 1))(等于 3)都可以工作。
  2. 像变量一样,使用 $ 提取值,以便你可以使用它。
  3. 空格并没有影响:((2+3)) 等价于 (( 2+3 ))(( 2 + 3 ))
  4. Bash 只能对整数进行操作。试试这样做: (( 5 / 2 )) ,你会得到 2;或者这样 (( 2.5 & 7 )) ,但会得到一个错误。然后,在按位操作中使用除了整数之外的任何东西(这就是我们现在所讨论的)通常是你不应该做的事情。

提示: 如果你想看看十进制数字在二进制下会是什么样子,你可以使用 bc ,这是一个大多数 Linux 发行版都预装了的命令行计算器。比如:

  1. bc <<< "obase=2; 97"

这个操作将会把 97 转换成十二进制(obase 中的 o 代表 “output” ,也即,“输出”)。

  1. bc <<< "ibase=2; 11001011"

这个操作将会把 11001011 转换成十进制(ibase 中的 i 代表 “input”,也即,“输入”)。

&& 是一个逻辑运算符

虽然它使用与其按位表达相同的逻辑原理,但 Bash 的 && 运算符只能呈现两个结果:1(“真值”)和0(“假值”)。对于 Bash 来说,任何不是 0 的数字都是 “真值”,任何等于 0 的数字都是 “假值”。什么也是 “假值”同时也不是数字呢:

  1. $ echo $(( 4 && 5 )) # 两个非零数字,两个为 true = true
  2. 1
  3. $ echo $(( 0 && 5 )) # 有一个为零,一个为 false = false
  4. 0
  5. $ echo $(( b && 5 )) # 其中一个不是数字,一个为 false = false
  6. 0

&& 类似, OR 对应着 || ,用法正如你想的那样。

以上这些都很简单……直到它用在命令的退出状态时。

&& 是命令退出状态的逻辑运算符

正如我们在之前的文章中看到的,当命令运行时,它会输出错误消息。更重要的是,对于今天的讨论,它在结束时也会输出一个数字。此数字称为“返回码”,如果为 0,则表示该命令在执行期间未遇到任何问题。如果是任何其他数字,即使命令完成,也意味着某些地方出错了。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读