gpt4 book ai didi

bash - 为什么 set -e; true && false && true 不退出?

转载 作者:行者123 更新时间:2023-11-29 08:51:34 25 4
gpt4 key购买 nike

根据 this accepted answer使用内置的 set -e 应该足以让 bash 脚本在第一个错误时退出。然而,以下脚本:

#!/usr/bin/env bash

set -e

echo "a"
echo "b"
echo "about to fail" && /bin/false && echo "foo"
echo "c"
echo "d"

打印:

$ ./foo.sh 
a
b
about to fail
c
d

删除 echo "foo" 停止脚本;但是为什么?

最佳答案

为了简化 EtanReisner 的详细回答,set -e 仅在出现“未捕获”错误时退出。在你的情况下:

echo "about to fail" && /bin/false && echo "foo"

失败代码 /bin/false 后跟 && 测试其退出代码。由于 && 测试退出代码,假设程序员知道他在做什么并预计该命令可能会失败。因此,脚本不会退出。

相比之下,考虑:

echo "about to fail" && /bin/false

程序不会在 /bin/false 的退出代码上进行测试或分支。因此,当 /bin/false 失败时,set -e 将导致脚本退出。

/bin/false 失败时退出的替代方案

考虑:

set -e
echo "about to fail" && /bin/false ; echo "foo"

如果 /bin/false 失败,此版本将退出。与使用 && 的情况一样,只有 /bin/false 成功时,最终语句 echo "foo" 才会执行.

关于bash - 为什么 set -e; true && false && true 不退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25794905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com