声明命令中 t 和 f 参数的 Bash shell 示例

声明命令中 t 和 f 参数的 Bash shell 示例

我不明白声明命令中的 t 和 f 参数到底为什么以及如何使用它们。能给我一些简单的插图吗?

答案1

trace属性使相关函数继承DEBUGRETURN陷阱。-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             

(我不知道为什么函数调用在陷阱中出现两次。)

相关内容