bash - 在 bash 中将比较输出打印为 bool 值

标签 bash shell

我有个问题

a=1
b=2

我想要一个变量的比较输出。即在 Windows 语言中,您可以编写这样的内容。它应该打印 false
print ($a == $b)

在控制台中尝试以下这些。
echo $a -eq $b
echo (( $a -eq $b ))
echo "$a" -eq "$b"
c= $(expr  "$a" -eq "$b"  )
echo $c

最佳答案

您可以使用算术扩展。

echo $(( a == b ))

如果表达式为真,这将打印 1,如果表达式为假,则打印 0。无需添加$在变量名前,可以像C语言一样使用运算符,空格可以省略。见 Bash reference manual:Shell arithmetic了解更多信息。

让它打印字符串“true”或“false”有点棘手。通常我和@Inian 一样,但使用 if ... then .. else ... fi因为我通常在 set -euo pipefail 下编码:
if (( a == b )); then echo true; else echo false; fi

但我们可以聪明一点,做一个数组:
to_bool[0]="false"
to_bool[1]="true"
echo ${to_bool[$(( a == b ))]}

但我看不出有什么区别,然后只打印 01 .

关于bash - 在 bash 中将比较输出打印为 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53477272/

相关文章:

regex - BASH:是否有一种简单的方法来检查字符串是否是有效的 SHA-1(或 MD5)散列?

php - AvantFAX 修复 bash 脚本错误

linux - Linux 命令 shell 中 "command > log.txt"和 "command 1>& log.txt"之间的区别?

bash - 从 bash 文件中读取星号字符 (*)

java - 访问 Steam 军团要塞 2 帐户信息的脚本

bash - 你如何在 bash 中创建一个 "function factory",其中生成的函数接受它自己的命令行参数?

linux - 需要使用 bash shell 脚本批量重命名文件的帮助

bash - Java 命令在 bash 上运行,在 zsh 上失败

mysql - shell脚本mysql输出转换

shell - 在 'grep' 结果中包含 header