将 bash 中的比较输出打印为布尔值

sjd*_*sjd 7 bash shell

我有个问题

a=1
b=2
Run Code Online (Sandbox Code Playgroud)

我想要将比较输出到变量。即在 Windows 语言中你可以写这样的东西。它应该打印false

print ($a == $b)
Run Code Online (Sandbox Code Playgroud)

在控制台中尝试以下这些。

echo $a -eq $b
echo (( $a -eq $b ))
echo "$a" -eq "$b"
c= $(expr  "$a" -eq "$b"  )
echo $c
Run Code Online (Sandbox Code Playgroud)

Kam*_*Cuk 5

您可以使用算术扩展。

echo $(( a == b ))
Run Code Online (Sandbox Code Playgroud)

如果表达式为真,则打印 1;如果表达式为假,则打印 0。变量名前不需要加$,可以像C语言一样使用运算符,并且空格可以省略。有关详细信息,请参阅Bash 参考手册:Shell 算术

让它打印字符串“true”或“false”有点棘手。通常我会使用与@Inian相同的内容,但是使用它if ... then .. else ... fi是因为我通常在以下代码下编写代码set -euo pipefail

if (( a == b )); then echo true; else echo false; fi
Run Code Online (Sandbox Code Playgroud)

但我们可以聪明地做一个数组:

to_bool[0]="false"
to_bool[1]="true"
echo ${to_bool[ a == b ]}
Run Code Online (Sandbox Code Playgroud)

但我认为与仅打印0或没有什么区别1