我正在试图找出为什么如果失败的块在条件链中,则错误保释行为-e
不起作用:
#!/bin/bash
set -e
{ echo "First"
ls blat
echo "(this should not print)"
}
打印出来:
First
ls: cannot access 'blat': No such file or directory
这是正确的。
以下内容:
#!/bin/bash
set -e
{ echo "First"
ls blat
echo "(this should not print)"
} || echo "Encountered an error"
打印出来:
First
ls: cannot access 'blat': No such file or directory
(this should not print)
我希望打印Encountered an error
而不是this should not print
有人可以向我解释这种差异的原因吗?
答案 0 :(得分:1)
从文档(强调我的):
shell不会退出 如果失败的命令是紧接着一段时间或直到命令列表的一部分 关键字,if或elif保留字后面的测试的一部分,执行的任何命令的一部分 在&&或||列表除了最终&&之后的命令或||,管道中的任何命令 但是最后一个,或者命令的返回值是否被反转!。
由于ls
是作为{...}
列表的非最终部分执行的||
复合的一部分,因此当ls
具有非routerLink
时,脚本不会退出零退出状态。