为什么 $((true == false)) 在 bash 中计算结果为 1?

2024-05-20

为什么 bash 有以下行为?

echo $((true == false))
1

我本以为这会打印0,但它打印1.

以下事实使情况变得更加复杂:

> echo $((true))
0
> echo $((false))
0
> echo $((true == true))
1
> echo $((false == false))
1

所有谈论 0 为真、1 为假的发帖者都没有抓住重点。在这种情况下,由于算术求值上下文导致,在通常的布尔意义上 1 为真,0 为假$(()).

The ==内部操作$(())不是 Bash 中返回状态的相等,它使用给定的文字执行数字相等,其中“false”和“true”被视为变量,但尚未绑定,两者都被解释为 0,因为它们尚未分配值:

$ echo $((true))
0
$ echo $((false))
0

如果你想比较 true 和 false 的返回状态,你需要这样的东西:

true
TRUE=$?
false
FALSE=$?
if (( $TRUE == $FALSE )); then echo TRUE; else echo FALSE; fi

但是,我不确定你为什么要这样做。

EDIT:更正了原始答案中有关“true”和“false”被解释为字符串的部分。他们不是。它们被视为变量,但尚未绑定任何值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 $((true == false)) 在 bash 中计算结果为 1? 的相关文章

  • k8s CronJob 在 pod 列表上循环

    我想在特定命名空间中的 pod 上运行循环 但诀窍是在 cronJob 中执行此操作 是否可以内联 kubectl get pods n foo 这里的技巧是在你获得 Pod 列表后 我需要循环并在 15 秒的超时时间内将每个 Pod 删除
  • JQ:当 bash 数组中存在属性值时选择

    我正在使用jq 1 4 当我的 VPCZoneIdentifier 存在时 我尝试选择元素 selected subnets bash 变量 selected subnets valueA valueB input elements nam
  • git push 无法在 cron 作业中工作

    我目前正在清理 CentOS 6 服务器上其他人留下的烂摊子 有一个应用程序需要每6小时备份一次到github帐户 有一个脚本负责准备数据并负责 git add 和 git commit git Push 由 expect 脚本负责 这样做
  • 单元测试 Bash 脚本

    我们的系统除了 Java 代码之外还运行一些 Bash 脚本 既然我们正在努力测试所有可能损坏的东西 并且那些 Bash 脚本可能会损坏 我们想测试它们 问题是很难测试 Bash 脚本 有没有测试 Bash 脚本的方法或最佳实践 或者我们应
  • 使用 SED 将单词的第一个字母大写

    如何将单词的第一个字母替换为大写字母 例如 Trouble me Gold rush brides into Trouble Me Gold Rush Brides 这一行应该做到这一点 sed e s b u 1 g
  • 我可以使用 GIT_CONFIG 环境变量来为所有 git 命令使用配置文件吗

    我一直在尝试使用 git 配置文件export GIT CONFIG
  • 递归触摸修复计算机之间的同步[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 由于我的错误 我正在寻找一种从命令行触摸目录 和子目录 中的每个文件的方法 我的同步存储库在我的开发机器上有点不同步 我现在已经通过一些令人不快的巫术
  • “bash -c 命令参数”末尾的参数的目的是什么?

    From man bash If the c option is present then commands are read from the first non option argument command string If the
  • brew install python,但随后:“python-2.7.6 已安装,只是未链接”

    免责声明 菜鸟 操作系统 10 8 5 当我在 bash 中安装 python 时 我得到了这个警告和错误 https i stack imgur com TBgBT png Warning Could not link python Un
  • 使用 tac 和 sed 反转文件

    我有一个用例 我需要搜索并替换文件中最后一次出现的字符串并将更改写回文件 下面的案例是该用例的简化版本 我正在尝试反转该文件 进行一些更改 再次将其反转并写入该文件 我为此尝试了以下代码片段 tac test sed s a b sed i
  • sed 将带空格的行插入到特定行

    我在开头有一行空格 例如 Hello world 我想将此行插入到文件中的特定行 例如 将 hello world 插入下一个文件 hello world result hello hello world world 我正在使用这个 sed
  • 在 MacOS 上重新启动终端而不关闭

    如何在不关闭窗口的情况下重新启动当前的 MacOS 终端会话 在Linux中我使用exec bash但在这种环境下它不起作用 我对 bash profile 提示 别名等 我想在不关闭它并再次打开的情况下查看 只需输入命令 exec bas
  • 如何在 JS 文件中使用 Github 机密

    我有一个基本的 git 存储库 其中包含用于构建和部署的 github 操作 主要是 HTML 和 TS 文件 但是我必须在一些需要保密的 API 密钥中使用 所以我想办法为他们使用 GITHUB SECRETS 如何在我的 js 或 TS
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • shell脚本中的“##”是什么意思? [复制]

    这个问题在这里已经有答案了 在编写脚本时 我遇到了这个命令 f file 我很想知道 什么是 这行是什么意思 In bash 它删除了前缀模式 在这里 它基本上为您提供了最后一个路径分隔符之后的所有内容 通过贪婪地删除前缀 后面跟随任意数量
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • 从 shell 查找不包含特定注释的 XML 文件

    我想搜索 awk grep sed 几个 XML 文件 pom xml 文件 跳过某些文件夹 而且 第一个条件是它们必须包含标签
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • unix 下日期字段排序

    我有包含数十万条记录的文本文件 其中一个字段是日期字段 有没有办法根据日期字段对文件进行排序 09 APR 12 04 08 43 632279000 AM 19 MAR 12 03 53 38 189606000 PM 19 MAR 12
  • 将以反斜杠结尾的行与下一行 awk 连接起来(来自著名的 awk 单行解释)

    这个练习来自于Peteris Krumins 的博客文章解释了 AWK 的俏皮话 http www catonmat net blog awk one liners explained part two 本质上是这条线 awk sub ge

随机推荐