为什么 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(使用前将#替换为@)