我不明白声明命令中的 t 和 f 参数到底为什么以及如何使用它们。能给我一些简单的插图吗?
答案1
该trace
属性使相关函数继承DEBUG
和RETURN
陷阱。-f
只是意味着 的参数declare
是一个函数,而不是一个变量。
Bash 的手册是这么说的关于功能:
shell 执行环境的所有其他方面在函数及其调用者之间都是相同的,但有以下例外:DEBUG 和 RETURN 陷阱不会被继承,除非已为函数指定了跟踪属性
还有的描述declare
:
-t
为每个名称指定跟踪属性。跟踪函数从调用 shell 继承 DEBUG 和 RETURN 陷阱。 Trace 属性对于变量没有特殊含义。
这是函数发生的情况没有属性trace
:
$ f() { echo a; echo b; }
$ trap 'echo DEBUG: $BASH_COMMAND' DEBUG
$ f
DEBUG: f
a
b
当函数被赋予属性时,会发生以下情况trace
。
$ declare -f -t f
DEBUG: declare -f -t f
$ f
DEBUG: f
DEBUG: f
DEBUG: echo a
a
DEBUG: echo b
b
(我不知道为什么函数调用在陷阱中出现两次。)