想要确定为什么当我做类似的事情时;
[ ${debug:=0} -gt 0 ] && set -x || set +x
无论条件set -x
是否启用。问题是我无法首先${debug}
使用set +x
IF debug=1
。
测试用例:
dtest(){ [ "${d:=0}" -gt 0 ] && set -x || set +x; var="abc"; echo "${var}"; }
d=0;dtest
d=1;dtest
d=0;dtest
不确定是否有人问过这个问题,也许我不确定要使用的措辞。
您必须在函数中重置 xtrace。
或者使用子外壳:
这对我来说很好。
set -x
一开始就被禁用,并且d=0
没有设置:在这里,它设置在函数的中间,最后两个命令在跟踪中打印:
在这里,
set -x
从函数的最后一次运行开始生效,并在函数中间被禁用。运行后不会打印最后两个命令的跟踪set +x
。如果您想在函数结束时无条件地禁用跟踪,则必须添加对
set +x
.或者,要使更改仅在函数内部生效,您可以
local -
在函数开头使用(在当前版本的 Bash 中)或$-
在进行更改之前手动保存值,并根据保存的值设置/重置跟踪结尾。在子 shell 中运行函数会产生类似的效果,但在那种情况下,函数中变量的任何更改在函数外部也不可见。