为什么这个bash快捷方式不起作用?

时间:2017-02-06 03:24:42

标签: bash shell

我有一个这样的测试脚本:

asdf() {
  return 1
}

asdf && echo 123 && exit
echo 321

321输出而不是123

为什么?

2 个答案:

答案 0 :(得分:1)

echo 123只会在asdf之后执行 iff &&成功执行,因为您已经修复了短路运算符asdf;现在你有return - 来自函数asdf的ed,返回值为1,而后者又成为asdf的退出状态,因此命令asdf被认为是失败的,因此<{1}}(当然还有echo 123)永远不会运行。

exit上没有这样的条件,因此它以通常的方式执行。

答案 1 :(得分:0)

&&运算符是逻辑AND。它做了懒惰的评估:如果左边的语句评估为false(即非零返回码),那么应用逻辑AND仍然会评估为false,因此评估正确的部分是无用的(在逻辑谓词意义上)。

由于函数返回1(就{B {而言false而言),右边的所有内容都将被忽略,未达到exit,并执行echo语句。

如果要强制执行该行上的所有命令,请改为使用:

{ asdf ; echo 123 ; exit ; }

这样的命令列表将始终评估它们中的每一个,而不管它们的返回代码如何。请注意,最后一个分号是强制性的。