Ale*_*lls 6 bash shell-script bash-functions
难道set -e不同的表现在这里
set -e;
function foo {
}
Run Code Online (Sandbox Code Playgroud)
对比
function foo {
set -e;
}
Run Code Online (Sandbox Code Playgroud)
不set -e属于内部的功能呢?set -e在函数外部声明是否会影响 shell 文件中的“嵌套”函数?反过来呢?我们应该叫local set -elol吗?
注意:此处的声明适用于 Bash 4.0.35 及更高版本。的实现set -e 在不同的 shell/版本之间差异很大。遵循Stéphane 的建议,不要使用set -e.
man bash在 Shell 内置命令/set部分中,虽然文本有点密集并且需要一点重点,但对事情的解释非常好。对于您的具体问题,答案是:
set -e这里的行为是否有所不同......与.. - 取决于你所说的“不同”是什么意思,但我怀疑你会考虑答案“不”......没有棘手的范围规则。它的行为非常线性。set -e在函数中,然后在返回后遇到非零状态?是的,这将退出。Ale*_*lls -2
避免头痛的解决方案:
function foo {
(
set -e;
)
}
Run Code Online (Sandbox Code Playgroud)
(只需使用子外壳)。有时为了让它既令人困惑又美观,我会这样做:
function foo {(
set -e;
# the rest goes here
)}
Run Code Online (Sandbox Code Playgroud)