set -e
这里的行为有所不同
set -e;
function foo {
}
与
function foo {
set -e;
}
set -e
属于函数内部吗?在函数外部声明是否set -e
会影响 shell 文件内的“嵌套”函数?反过来呢?我们应该打电话local set -e
吗哈哈
答案1
注意:此处的声明适用于 Bash 版本 4.0.35 及更高版本。的实施set -e
不同 shell/版本之间差异很大。跟随史蒂芬的建议并且不要使用set -e
.
man bash
Shell 内置命令/set
部分中的内容解释得很好,尽管文本有点密集并且需要一些重点。对于您的具体问题,答案是:
- 做
set -e
有所不同...与..- 取决于你所说的“不同”的意思,但我怀疑你会认为答案“不”......没有棘手的范围规则。它的作用非常线性。 - set -e 属于函数内部吗?- 完全有效。
- 在函数外部声明的 set -e 是否会影响 shell 文件内的“嵌套”函数?- 是的
- 反过来呢?-
set -e
在函数中然后返回后遇到非零状态?是的,这将退出。
答案2
避免头痛的解决方案:
function foo {
(
set -e;
)
}
(只需使用子外壳)。有时为了让它既令人困惑又美观,我会这样做:
function foo {(
set -e;
# the rest goes here
)}