如何获取当前的“set”变量

3

我的问题最好通过一个例子来解释。

set -x或set -v“打开”功能

set +x或set +v“关闭”功能

但是,如果我的脚本调用另一个脚本或shell函数,那么在另一个脚本/函数中,如何获取这些设置的状态。例如:

    # In called script/function
    # <save status of "set">

    set -abcdef 

    # do stuff

    # <restore status of "set">

谢谢!


1
$- 参数包含一组单字母选项标志(尝试使用 echo $- 命令;对我来说,它输出了 himBH)。 - Jonathan Leffler
1个回答

1
这是一个简单的解决方案:
# In called script/function
(
  set -abcdef 
  # do stuff
)

"(...)是一个子shell;当该子shell完成时,其环境也随之消失,回到入口处的环境。如果这太过激烈,您可以复制$-$SHELLOPTS来保留当前选项(SHELLOPTS包括一些没有单字符缩写的选项,因此更加通用),然后从中费力地恢复。"

可能有必要提到 set +oshopt -p,以使恢复情况稍微不那么费力... 除非你知道这些方法无法奏效的原因。 - Etan Reisner
不幸的是,在(子shell)中设置的所有变量也将丢失。它不适用于可源代码化的脚本。 - uvsmtid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接