Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash if else&;的正确方法是什么&|捷径?_Bash_If Statement - Fatal编程技术网

使用bash if else&;的正确方法是什么&|捷径?

使用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

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

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

[[ 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,后半部分执行
    echo“true”
    语句。(&&->如果第一部分为true,则运行第二部分)
  • 现在我们有了
    | echo“false”
    。这部分实际上没有执行,因为上半部分(
    echo“true”
    )返回true,因为echo打印成功((| |->如果第一部分为false,则运行第二部分)。
现在,如果我们分解第二段代码:

[[ 1 -eq 1 ]] && echo "true" || echo "false"
[[ 1 -eq 1 ]] && infMsg "true" || infMsg "false"
最可能发生的事情是:

  • [[1-eq 1]]&&infMsg“true”
    被计算。第一方为true。然后,由于前半部分为true,后半部分执行
    infMsg“true”
    语句。(&&->如果第一部分为true,则运行第二部分)
  • 现在我们有了
    |infMsg“false”
    。如果上一个命令中的
    infMsg“true”
    没有返回被解释为成功(0)的状态代码,则前半部分被解释为false,触发
    infMsg“false”
    (如果第一部分为false,则运行第二部分)。
此处提供的重要信息如下:

  • ||仅当上半部分为FALSE时才运行下半部分
  • &&只有在上半部分为真时才运行下半部分

该函数是否恰好返回非零值?好的,很酷-谢谢。我将检查ingMsg函数,确保它显式返回错误代码。我做了一些测试,并编写了一个没有返回代码的新infMsg函数,它仍然如我所料工作。我认为,如果函数退出时没有显式返回,则如果re没有内部错误。因此我仍然感到困惑:
infMsg(){echo-e“**$1”}
[[1-eq 1]]&&infMsg“测试成功”| | infMsg“测试失败”
仍然告诉我:
**测试成功
如果没有显式的
返回
命令,函数的退出状态是在函数中执行的最后一个命令的退出状态。在这种情况下,它是
echo-e“**$1”
的退出状态,它是(始终?)0。