我遇到过一些奇怪的行为(很可能并不奇怪,但我不明白!)
我想使用bash简写语法编写一些if / e,se语句:
[[ 1 -eq 1 ]] && echo "true" || echo "false"
上述代码的输出给出:
true
现在上面的代码实际上工作正常。但是下一个代码不会:
[[ 1 -eq 1 ]] && infMsg "true" || infMsg "false"
infMsg 只是一个功能。上面代码的输出给出:
true
false
我只想说'真'。
&&&&& ||语句处理函数的退出代码?
答案 0 :(得分:6)
我怀疑'infMsg'的退出代码不是0(成功)。 如果我们分解第一段代码:
[[ 1 -eq 1 ]] && echo "true" || echo "false"
发生的事情是:
[[ 1 -eq 1 ]] && echo "true"
部分代码,因为&&
的优先级高于||
(更多信息[此处1)echo "true"
语句。 (&& - >如果第一部分为真,则运行第二部分)|| echo "false"
。这部分实际上没有执行,因为上半部分(echo "true"
)返回true,因为echo成功打印((|| - >如果第一部分为假,则运行第二部分)。强>)。现在,如果我们分解第二段代码:
[[ 1 -eq 1 ]] && infMsg "true" || infMsg "false"
最有可能发生的事情 是:
[[ 1 -eq 1 ]] && infMsg "true"
。第一面是真的。然后,因为上半部分是真的,后半部分执行infMsg "true"
语句。 (&& - >如果第一部分为真,则运行第二部分)。 || infMsg "false"
。如果上一个命令的infMsg "true"
没有返回被解释为success(0)的状态代码,则前半部分被解释为false,触发infMsg "false"
((||) - >如果第一部分为假,则运行第二部分。)).. 要离开的重要信息: