bash 函数中的 `set -e`

bash 函数中的 `set -e`

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 bashShell 内置命令/set部分中的内容解释得很好,尽管文本有点密集并且需要一些重点。对于您的具体问题,答案是:

  • set -e有所不同...与..- 取决于你所说的“不同”的意思,但我怀疑你会认为答案“不”......没有棘手的范围规则。它的作用非常线性。
  • set -e 属于函数内部吗?- 完全有效。
  • 在函数外部声明的 set -e 是否会影响 shell 文件内的“嵌套”函数?- 是的
  • 反过来呢?-set -e在函数中然后返回后遇到非零状态?是的,这将退出。

答案2

避免头痛的解决方案:

function foo {
  (
       set -e;
  )
}

(只需使用子外壳)。有时为了让它既令人困惑又美观,我会这样做:

 function foo {(
      set -e;
      # the rest goes here
  )}

相关内容