栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么不设置-e导致`false ||失败 假&&真实?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么不设置-e导致`false ||失败 假&&真实?

set -e
仅对 未检查的 故障保驾护航。

当您在故障分支(使用

if
until
while
&&
||
),即故障检查。

如果规范不是以这种方式编写的,则短路布尔运算将无法有效地用于流控制,因为错误的分支总是会导致退出。


引用规范,并强调:

启用此选项后,如果任何命令失败(由于Shell错误的后果中列出的任何原因或通过返回大于零的退出状态),则Shell应立即退出,就像通过执行exit特殊内置实用程序一样不带参数,但以下情况除外:

  1. 多命令管道中任何单个命令的失败都不会导致外壳退出。仅考虑管道本身的故障。

  2. 该-e设置应执行以下化合物列表时被忽略

    while
    until
    if
    ,或
    elif
    保留字,管道期初
    !
    保留字,或
    比上其他的与一或列表的任何命令

  3. 如果除subshel​​l命令以外的复合命令的退出状态

    -e
    是被忽略时失败的结果,则
    -e
    不适用于该命令。

此要求分别适用于外壳环境和每个子外壳环境。例如,在:

set -e; (false; echo one) | cat; echo two

false
命令使子shell退出而不执行
echo one
; 但是,
echo two
由于管道的退出状态
(false; echo one)| cat
为零,因此执行。

请注意,此规范已随时间而改变;实现POSIX规范的先前版本的shell可能与此处引用的版本不完全一致。


在这里提出一些意见-
我强烈建议您阅读BashFAQ#105,并确保您在决定使用之前完全理解其中描述的所有行为,

set-e
而不是手动实施显式的错误处理。所述FVUE维基进一步描述之间的行为的区别
set-e
在bash本地模式和POSIX模式,它同样应理解的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号