带选项 -t 的声明有什么用

带选项 -t 的声明有什么用

如果调用命令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 ...

相关内容