找不到合适的标题,我不明白破折号/ bash中的行为。也就是说,如果一个命令失败,我使用set -e来救助,并且命令组来处理积极的结果。为什么不设置-e导致“false”失败?假&&真'?
即。一般方案是:
[ ! wantcommand ] || command
比表示命令只在需要时才会执行,并且失败会自动终止脚本。
可能有一些必要的后处理,在这种情况下,我用这个:
[ ! wantcommand ] || { command && postprocess; }
这导致了一些奇怪的bughunting,因为这不会杀壳,我不能让背后的原因。我现在必须经历一些shell代码块,但想了解原因。
来进行测试:
bash -c 'set -e; { false || false && echo "post" ; }; echo "ec $?"'
或:
bash -c 'set -e; { set -e; false || false && echo "post" ; }; echo "ec $?"'
注:我不要求修复,但主要为什么返回代码为1,但外壳不会退出
是的,在我看来,明确的错误处理方式没有那么混乱,看起来很丑,但至少容易理解。不能说我完全理解了这种行为,这对我来说似乎非常不直观。稍后将通读链接,谢谢 我误解的部分原因似乎来自make中的脚本,如果ec!= 0总是会失败,无论如何 –