(Linux bash 4.1.2)我有一个调用另一个函数的bash函数。低级函数希望将-xv设置为调试,但我不希望它在父函数中混淆x和v的值。即我希望子函数按-xv,然后在返回时恢复先前的设置。例如。:
function outer(){ echo starting; inner; echo done; }
function inner(){
set -xv
echo inside
set +xv
}
outer
如果外部的设置是默认设置,则此方法有效;否则它会在外部代码的其余部分强制+ xv。我可以想象一些解析BASHOPTS的非常混乱的脚本,但似乎应该有更好的方法吗?
如果您不需要共享外部代码的环境或在outside
中修改inside
中的变量,则可以使用( inner )
启动子进程
function outer(){ echo starting; inner; echo done; }
function inner(){
(
set -xv
echo inside
)
}
outer
请注意,由于您在子shell中执行,因此无需取消设置x和v。
您也可以简单地将调用包装到inner in outer而不修改inner:
function outer(){ echo starting; ( inner ); echo done; }
您可以在此处找到有关子壳和变量范围的更多信息。 https://www.tldp.org/LDP/abs/html/subshells.html
local save=$-; set -x ... set +x -$save