在子 shell 中设置 bash 标志 - 它会影响父 shell 吗?

在子 shell 中设置 bash 标志 - 它会影响父 shell 吗?

我在 bash 脚本中有这个:

(
  set -o pipefail
  echo "foobar" | bash
  set +o pipefail
)

我是否需要重置 pipelinefail 设置,或者我可以省略该行吗?换句话说,子shell中的pipefail设置是否会影响父shell?

所以这意味着我假设:

(
  set -o pipefail
  echo "foobar" | bash
)

真的和上面没有什么不同吗?

答案1

引用手册页:

对子 shell 环境所做的更改不会影响 shell 的执行环境。

您可以轻松测试您的案例:

$ set +o pipefail
$ (set -o pipefail)
$ shopt -o pipefail
pipefail        off

相关内容