使用bash if else&;的正确方法是什么&|捷径?
我遇到了一些奇怪的行为(可能并不奇怪,但我不明白!) 我想使用bash速记语法编写一些if/e、se语句:使用bash if else&;的正确方法是什么&|捷径?,bash,if-statement,Bash,If Statement,我遇到了一些奇怪的行为(可能并不奇怪,但我不明白!) 我想使用bash速记语法编写一些if/e、se语句: [[ 1 -eq 1 ]] && echo "true" || echo "false" 上述代码的输出给出: true true false 现在,上面的代码实际上运行良好。但下一个代码没有: [[ 1 -eq 1 ]] && infMsg "true" || infMsg "false" infMsg只是一个函数。上述代码的输出给出: true
[[ 1 -eq 1 ]] && echo "true" || echo "false"
上述代码的输出给出:
true
true
false
现在,上面的代码实际上运行良好。但下一个代码没有:
[[ 1 -eq 1 ]] && infMsg "true" || infMsg "false"
infMsg只是一个函数。上述代码的输出给出:
true
true
false
我只想让它说“真的”
&&&| |语法处理函数的退出代码的方式中是否缺少某些东西?我怀疑“infMsg”的退出代码不是0(成功)。 如果我们分解第一段代码:
[[ 1 -eq 1 ]] && echo "true" || echo "false"
[[ 1 -eq 1 ]] && infMsg "true" || infMsg "false"
正在发生的是:
- 首先计算代码的
部分,因为[[1-等式1]&&echo“true”
的优先级高于&&
(更多信息[此处])|
- 前半部分返回true。然后,由于前半部分为true,后半部分执行
语句。(&&->如果第一部分为true,则运行第二部分)echo“true”
- 现在我们有了
。这部分实际上没有执行,因为上半部分(| echo“false”
)返回true,因为echo打印成功((| |->如果第一部分为false,则运行第二部分)。)echo“true”
[[ 1 -eq 1 ]] && echo "true" || echo "false"
[[ 1 -eq 1 ]] && infMsg "true" || infMsg "false"
最可能发生的事情是:
被计算。第一方为true。然后,由于前半部分为true,后半部分执行[[1-eq 1]]&&infMsg“true”
语句。(&&->如果第一部分为true,则运行第二部分)infMsg“true”
- 现在我们有了
。如果上一个命令中的|infMsg“false”
没有返回被解释为成功(0)的状态代码,则前半部分被解释为false,触发infMsg“true”
((如果第一部分为false,则运行第二部分)。)infMsg“false”
- ||仅当上半部分为FALSE时才运行下半部分
- &&只有在上半部分为真时才运行下半部分
infMsg(){echo-e“**$1”}
[[1-eq 1]]&&infMsg“测试成功”| | infMsg“测试失败”
仍然告诉我:**测试成功
如果没有显式的返回
命令,函数的退出状态是在函数中执行的最后一个命令的退出状态。在这种情况下,它是echo-e“**$1”
的退出状态,它是(始终?)0。