gpt4 book ai didi

bash - 如果 else && || 使用 bash 的正确方法是什么捷径?

转载 作者:行者123 更新时间:2023-12-03 23:55:31 29 4
gpt4 key购买 nike

我遇到了一些奇怪的行为(可能并不奇怪,但我不明白!)

我想使用 bash 速记语法编写一些 if/e,se 语句:

[[ 1 -eq 1 ]] && echo "true" || echo "false"

上述代码的输出给出:
true

现在上面的代码实际上工作正常。但是下一个代码不会:
[[ 1 -eq 1 ]] && infMsg "true" || infMsg "false"

infMsg 只是一个函数。上述代码的输出给出:
true
false

我只希望它说“真实”。

我在 && || 的方式中遗漏了什么吗?语法处理函数的退出代码?

最佳答案

我怀疑您的“infMsg”退出代码不是 0(成功)。
如果我们分解第一段代码:

[[ 1 -eq 1 ]] && echo "true" || echo "false"

发生的事情是:
  • [[ 1 -eq 1 ]] && echo "true"&& 起首先评估部分代码具有比 || 更高的优先级(更多信息[这里1)
  • 前半部分返回 true。然后,因为上半年是真的 ,下半场执行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"从前面的命令没有返回一个被解释为成功(0)的状态码,前半部分被解释为假,触发infMsg "false" ( (||-> 如果第一部分是假的,运行第二部分。)..

  • 重要的信息在这里拉开:
  • ||如果上半场为 FALSE,则仅运行下半场。
  • && 仅在前半部分为 TRUE 时才运行后半部分。
  • 关于bash - 如果 else && || 使用 bash 的正确方法是什么捷径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15538782/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com