linux – 为什么bash不会因为短路命令序列中的故障而停止错误?

linux – 为什么bash不会因为短路命令序列中的故障而停止错误?,第1张

概述当我运行带有-e选项的bash脚本时,我看到一些对我没有意义的行为,该选项有多个命令与&& s串在一起,其中一个失败.我希望脚本停止在失败的命令上并返回退出状态,但它只是愉快地执行脚本的其余部分. 以下是对我有意义的例子: $false && true; echo $?1$bash -xe -c "false && true"; echo $?+ false1$bash -xe -c 当我运行带有-e选项的bash脚本时,我看到一些对我没有意义的行为,该选项有多个命令与&& s串在一起,其中一个失败.我希望脚本停止在失败的命令上并返回退出状态,但它只是愉快地执行脚本的其余部分.

以下是对我有意义的例子:

$false && true; echo $?1$bash -xe -c "false && true"; echo $?+ false1$bash -xe -c "false; true"; echo $?+ false1

这是对我没有意义的那个:

$bash -xe -c "false && true; true"; echo $?+ false+ true0

这是我不明白发生了什么的地方.虚假&& true返回状态1因此脚本不应该停止执行并返回状态1,就像脚本为false时一样;真正?

在进行实验的过程中,我发现如果用括号括起命令链,它会按照我的预期方式工作:

$bash -xe -c "(false && true); true"; echo $?+ false1

有人能解释一下吗?

解决方法 这里的逻辑是你使用&&已经是错误检查.同样地,bash不会将if条件中的失败视为值得中止,即使使用set -e也是如此.

当您将命令包装在括号中时,实际上是在子shell中运行这些命令,因此脚本本身只能看到该子shell的返回,即:它不知道&&参与其中,所以它会像你期望的那样中止.

总结

以上是内存溢出为你收集整理的linux – 为什么bash不会因为短路命令序列中的故障而停止错误?全部内容,希望文章能够帮你解决linux – 为什么bash不会因为短路命令序列中的故障而停止错误?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1031881.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存