如果调用命令help declare
.您将看到以下信息:
-t NAME : to make NAMEs have the `trace' attribute
是否有任何示例演示此选项的用法。我认为这与命令的作用相同,set -o functrace
只是它仅适用于参数而不是所有函数。
这个问题的动机是我想要一个函数 foo 继承一个陷阱。所以我尝试了declare -t foo
但没有成功。
我当然可以使用set -o functrace
让所有函数继承陷阱,但在某些情况下,我只想一两个函数继承陷阱。
这是脚本:
function foo {
var=1
var=2
var=3
}
declare -t foo
var=0
trap 'echo var is $var' DEBUG
foo
trap - DEBUG # turn off the DEBUG trap
这是脚本的输出:
var is 0
var is 3
我期待得到类似的东西:
var is 0
var is 1
var is 2
var is 3
答案1
declare -t foo
设置跟踪属性多变的 foo
(反正没有什么特殊效果)。您需要使用-f
在函数上设置它:
declare -ft foo
将您的脚本修改为使用后-f
,我得到以下输出(注释中的解释):
var is 0 # foo called
var is 0 # before the first command in function is run
var is 0 # var=1
var is 1 # var=2
var is 2 # var=3
var is 3 # trap ...