返回顶部
首页 > 资讯 > 精选 >Bash中的逻辑和(&)该如何理解
  • 816
分享到

Bash中的逻辑和(&)该如何理解

2023-06-16 09:06:35 816人浏览 薄情痞子
摘要

本篇文章为大家展示了Bash中的逻辑和(&)该如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在 Bash 中,你可以使用 & 作为 AND(逻辑和)操作符。有人可能会认为两篇

本篇文章为大家展示了Bash中的逻辑和(&)该如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

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

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

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

& 是一个按位运算符

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

AND

0 & 0 = 00 & 1 = 01 & 0 = 01 & 1 = 1

OR

0 | 0 = 00 | 1 = 11 | 0 = 11 | 1 = 1

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

$ echo $(( 2 & 3 )) # 00000010 AND 00000011 = 000000102$ echo $(( 120 & 97 )) # 01111000 AND 01100001 = 0110000096

OR(|)也是如此:

$ echo $(( 2 | 3 )) # 00000010 OR 00000011 = 000000113$ echo $(( 120 | 97 )) # 01111000 OR 01100001 = 01111001121

说明:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 使用 (( ... )) 告诉 Bash 双括号之间的内容是某种算术或逻辑运算。(( 2 + 2 ))(( 5 % 2 ))% 是求模运算符)和 ((( 5 % 2 ) + 1))(等于 3)都可以工作。

  3. 像变量一样,使用 $ 提取值,以便你可以使用它。

  4. 空格并没有影响:((2+3)) 等价于 (( 2+3 ))(( 2 + 3 ))

  5. 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 = true1$ echo $(( 0 && 5 )) # 有一个为零,一个为 false = false0$ echo $(( b && 5 )) # 其中一个不是数字,一个为 false = false0

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

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

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

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

所以 0 意味着是好的,任何其他数字都说明有问题发生,并且,在返回码的上下文中,0 意味着“真”,其他任何数字都意味着“假”。对!这 与你所熟知的逻辑操作完全相反 ,但是你能用这个做什么? 不同的背景,不同的规则。这种用处很快就会显现出来。

让我们继续!

返回码 临时 储存在 特殊变量 ? 中 &mdash;&mdash; 是的,我知道:这又是一个令人迷惑的选择。但不管怎样,别忘了我们在讨论变量的文章中说过,那时我们说你要用 $ 符号来读取变量中的值,在这里也一样。所以,如果你想知道一个命令是否顺利运行,你需要在命令结束后,在运行别的命令之前马上用 $? 来读取 ? 变量的值。

试试下面的命令:

$ find /etc -iname "*.service"find: '/etc/audisp/plugins.d': Permission denied/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service[......]

正如你在上一篇文章中看到的一样,普通用户权限在 /etc 下运行 find 通常将抛出错误,因为它试图读取你没有权限访问的子目录。

所以,如果你在执行 find 后立马执行&hellip;&hellip;

echo $?

&hellip;&hellip;,它将打印 1,表明存在错误。

(注意:当你在一行中运行两遍 echo $? ,你将得到一个 0 。这是因为 $? 将包含第一个 echo $? 的返回码,而这条命令按理说一定会执行成功。所以学习如何使用 $? 的第一课就是: 单独执行 $? 或者将它保存在别的安全的地方 &mdash;&mdash; 比如保存在一个变量里,不然你会很快丢失它。)

一个直接使用 ? 变量的用法是将它并入一串链式命令列表,这样 Bash 运行这串命令时若有任何操作失败,后面命令将终止。例如,你可能熟悉构建和编译应用程序源代码的过程。你可以像这样手动一个接一个地运行它们:

$ configure...$ make...$ make install...

你也可以把这三行合并成一行&hellip;&hellip;

$ configure; make; make install

&hellip;&hellip; 但你要希望上天保佑。

为什么这样说呢?因为你这样做是有缺点的,比方说 configure 执行失败了, Bash 将仍会尝试执行 makesudo make install&mdash;&mdash;就算没东西可 make ,实际上,是没东西会安装。

聪明一点的做法是:

$ configure && make && make install

这将从每个命令中获取退出码,并将其用作链式 && 操作的操作数。

但是,没什么好抱怨的,Bash 知道如果 configure 返回非零结果,整个过程都会失败。如果发生这种情况,不必运行 make 来检查它的退出代码,因为无论如何都会失败的。因此,它放弃运行 make,只是将非零结果传递给下一步操作。并且,由于 configure && make 传递了错误,Bash 也不必运行make install。这意味着,在一长串命令中,你可以使用 && 连接它们,并且一旦失败,你可以节省时间,因为其他命令会立即被取消运行。

你可以类似地使用 ||,OR 逻辑操作符,这样就算只有一部分命令成功执行,Bash 也能运行接下来链接在一起的命令。

鉴于所有这些(以及我们之前介绍过的内容),你现在应该更清楚地了解我们在 这篇文章开头 出现的命令行:

mkdir test_dir 2>/dev/null || touch backup/dir/images.txt && find . -iname "*jpg" > backup/dir/images.txt &

因此,假设你从具有读写权限的目录运行上述内容,它做了什么以及如何做到这一点?它如何避免不合时宜且可能导致执行中断的错误?

上述内容就是Bash中的逻辑和(&)该如何理解,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: Bash中的逻辑和(&)该如何理解

本文链接: https://lsjlt.com/news/283009.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Bash中的逻辑和(&)该如何理解
    本篇文章为大家展示了Bash中的逻辑和(&)该如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在 Bash 中,你可以使用 & 作为 AND(逻辑和)操作符。有人可能会认为两篇...
    99+
    2023-06-16
  • javascript中逻辑运算符&&和||返回值的示例分析
    这篇文章主要介绍了javascript中逻辑运算符&&和||返回值的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。v...
    99+
    2024-04-02
  • 如何理解Oracle逻辑读和物理读
    本篇文章为大家展示了如何理解Oracle逻辑读和物理读,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.物理读(physical read)物理读即是把数据从磁盘读...
    99+
    2024-04-02
  • 如何理解CSS中选择器的逻辑处理
    这篇文章给大家介绍如何理解CSS中选择器的逻辑处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在过去的很长一段时间中,我们都说 CSS 是不带有任何逻辑的,意思是在 CSS 中没有控...
    99+
    2024-04-02
  • 如何理解linux shell逻辑运算符、逻辑表达式
    这篇文章主要介绍“如何理解linux shell逻辑运算符、逻辑表达式”,在日常操作中,相信很多人在如何理解linux shell逻辑运算符、逻辑表达式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解l...
    99+
    2023-06-09
  • 如何理解Python中 and 和 or 运算短路逻辑
    本篇文章为大家展示了如何理解Python中 and 和 or 运算短路逻辑,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。短路逻辑规则如下:表达式从左至右运算,若 or 的左侧逻辑值为 True ,则...
    99+
    2023-06-01
  • 如何理解逻辑架构和InnoDB存储引擎
    本篇文章为大家展示了如何理解逻辑架构和InnoDB存储引擎,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、MySQL逻辑架构1、逻辑架构图基于下面的逻辑架构图,可...
    99+
    2024-04-02
  • Fluent Mybatis如何做到代码逻辑和sql逻辑的合一
    使用fluent mybatis可以不用写具体的xml文件,通过java api可以构造出比较复杂的业务sql语句,做到代码逻辑和sql逻辑的合一。不再需要在Dao中组装查询或更新操...
    99+
    2024-04-02
  • 如何用Bash编程实现逻辑操作符和shell扩展
    这篇文章将为大家详细讲解有关如何用Bash编程实现逻辑操作符和shell扩展,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。逻辑操作符Bash 中有大量的用于不同条件表达式的逻辑操作符。最基本的是 if 控...
    99+
    2023-06-16
  • Linux中如何创建逻辑卷管理LVM
    Linux中如何创建逻辑卷管理LVM,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  LVM讲解:  图像大纲:  1)LVM是什么,作用:  LVM称为逻辑卷管理,作用是提高...
    99+
    2023-06-13
  • 如何理解SQL Server数据体系和应用程序逻辑
    这篇文章给大家介绍如何理解SQL Server数据体系和应用程序逻辑,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  很多人都用过SQLServer数据库,但是很少的人真正理解SQLS...
    99+
    2024-04-02
  • 如何改进golang中的分割逻辑
    在golang中,分割字符串是一个常见的操作,然而,有时候我们可能会遇到一些分割逻辑上的问题。那么,如何改进golang中的分割逻辑呢?在本文中,php小编鱼仔将为您介绍一些实用的技巧...
    99+
    2024-02-09
  • SQL Server中STATISTICS IO物理读和逻辑读的误区
    SQL Server中STATISTICS IO物理读和逻辑读的误区   大家知道,SQL Server中可以利用下面命令查看某个语句读写IO的情况 SET STATISTICS IO ON 那么这个命令的结果显示的物理读、...
    99+
    2021-09-09
    SQL Server中STATISTICS IO物理读和逻辑读的误区
  • PHP中的逻辑错误是如何产生的?
    PHP中的逻辑错误是如何产生的?作为一门流行的Web开发语言,PHP在编写网站和应用程序时非常常见。然而,虽然PHP是一种相对简单易学的语言,但在编码过程中仍然容易出现各种逻辑错误。本文将探讨PHP中逻辑错误的产生原因,并提供一些具体的代码...
    99+
    2023-12-09
    PHP逻辑错误 错误产生原因 编程逻辑问题
  • JSF和MVC该如何理解
    这篇文章将为大家详细讲解有关JSF和MVC该如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JSF是一种标准的 J2EE 表示层的技术,其主旨是为了使 Java 开发人员能够快速的开发...
    99+
    2023-06-17
  • 如何理解shell编程中的BASH
    本篇内容介绍了“如何理解shell编程中的BASH”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!认识Bash通过Shell将输入的指令与Ke...
    99+
    2023-06-09
  • BSP和JSP里的UI元素ID如何生成逻辑
    本篇文章给大家分享的是有关BSP和JSP里的UI元素ID如何生成逻辑,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。CRM WebClient UIWebClient UI渲染出...
    99+
    2023-06-04
  • JavaScript中的单线程和异步该如何理解
    小编今天带大家了解JavaScript中的单线程和异步该如何理解,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“JavaScript中...
    99+
    2023-06-29
  • Bash中的&符号和文件描述符如何理解
    这篇文章将为大家详细讲解有关Bash中的&符号和文件描述符如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在我们探究大多数链式 Bash 命令中出现的所有的杂项符号(&、|、;...
    99+
    2023-06-16
  • 如何应对报表开发中的复杂逻辑
    报表开发中经常遇到非常复杂的数据处理逻辑,实现时要写很多层嵌套的 SQL,实现困难且难以维护;使用 JAVA 硬编码是另外一种选择,JAVA 具备良好的分步支持,但缺乏通用的结构化计算类库,使得硬编码难度也不低;此外借助 JAVA 实现的报...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作