Tcl语言
https://blog.csdn.net/weixin_45791458/category_12488978.html?spm=1001.2014.3001.5482
info命令是Tcl中非常重要的信息查询命令。它主要用于查询解释器状态、变量信息、命令信息、过程信息、调用栈信息等内容。
在Tcl脚本调试、过程封装、变量检查以及EDA工具脚本开发中,info命令都非常常用。例如,可以使用info exists判断变量是否存在,使用info commands查看当前可用命令,使用info procs查看当前定义的过程,使用info script获取当前脚本文件名。
info命令本身也是"主命令+子命令"的结构,常见形式如下:
info subcommand arg arg ...
变量查询
commands
info commands用于返回当前解释器中可用的命令列表,包括Tcl内建命令、用户自定义过程以及工具扩展命令。
puts [info commands]
也可以使用匹配模式筛选命令。
puts [info commands file]
puts [info commands str*]
procs
info procs用于返回当前定义的Tcl过程列表。
proc add {a b} {
return [expr {$a + $b}]
}
puts [info procs]
auto_load_index unknown auto_import auto_execok clock add auto_qualify auto_load tclLog
也可以使用匹配模式筛选过程名。
proc report_area {} {
puts "report area"
}
proc report_timing {} {
puts "report timing"
}
puts [info procs report*]
report_timing report_area
info procs只查询由proc定义的过程,不一定包含所有内建命令。如果想查看所有命令,应使用info commands。
过程信息查询
args
info args用于返回某个过程的参数列表。
proc add {a b} {
return [expr {$a + $b}]
}
puts [info args add]
a b
对于带默认值的参数,info args只返回参数名,不直接返回默认值。
proc hello {{name "Tcl"}} {
puts "Hello $name"
}
puts [info args hello]
name
default
info default用于判断过程参数是否有默认值,并取得默认值。
proc hello {{name "Tcl"}} {
puts "Hello $name"
}
if {[info default hello name value]} {
puts "参数name有默认值:$value"
} else {
puts "参数name没有默认值"
}
参数name有默认值:Tcl
body
info body用于返回指定过程的过程体,也就是proc定义时大括号中的内容。
proc add {a b} {
return [expr {$a + $b}]
}
puts [info body add]
return [expr {$a + $b}]
脚本和解释器信息
script
info script用于返回当前正在执行的脚本文件名(绝对路径还是相对路径取决于传递给Tcl解释器的命令行文件名)。
puts [info script]
./Desktop/test.tcl
如果代码是从交互式tclsh中输入的,info script通常返回空字符串。 在脚本文件中,info script常用于获取当前脚本所在路径。
nameofexecutable
info nameofexecutable用于返回当前Tcl解释器的可执行文件路径(绝对路径还是相对路径取决于命令行命令名)。
puts [info nameofexecutable]
/usr/bin/tclsh
patchlevel
info patchlevel用于返回当前Tcl解释器的版本号。
puts [info patchlevel]
8.5.13
tclversion
info tclversion用于返回Tcl的主版本号和次版本号。与info patchlevel相比,info tclversion通常不包含补丁版本号。
puts [info tclversion]
8.5
hostname
info hostname用于返回当前机器的主机名。
puts [info hostname]
EDA
调用栈信息
level
info level用于查看当前调用栈层级。如果不带参数,返回当前过程调用层级。
proc p1 {} {
p2
}
proc p2 {} {
puts [info level]
}
p1
2
如果带数字参数,info level可以返回指定层级的调用命令。
proc p1 {} {
p2 100
}
proc p2 {x} {
puts "当前层级:[info level]"
puts "当前调用:[info level 0]"
puts "上一层调用:[info level -1]"
}
p1
当前层级:2
当前调用:p2 100
上一层调用:p1
info level 0表示当前过程调用,info level -1表示上一层调用。
frame
info frame用于返回调用帧的详细信息,包括调用类型、文件名、行号、命令等。
proc show_location {} {
set f [info frame 0]
puts "当前frame信息:$f"
}
show_location
当前frame信息:type source line 2 file /home/zhangchen/Desktop/test.tcl cmd {info frame 0} proc ::show_location level 0
namespace
info namespace用于返回当前上下文所在的命名空间。
puts [info namespace]
::
namespace eval myns {
puts [info namespace]
}
::myns