TCL 中以双冒号开头的行的用途是什么?

Mar*_*tin 3 tcl

一些Cisco路由器运行名为 IOS 的操作系统,该操作系统内置 TCL 解释器。我研究了 IOS TCL 的示例脚本,它在脚本的开头有以下行:

::cisco::eem::event_register_timer cron name crontimer2 cron_entry $_cron_entry maxrun_sec 240
Run Code Online (Sandbox Code Playgroud)

$_cron_entry变量是一个环境变量,其值为0-59/2 0-23/1 * * 0-7,即以双冒号开头的行也可以这样写:

::cisco::eem::event_register_timer cron name crontimer2 cron_entry 0-59/2 0-23/1 * * 0-7 maxrun_sec 240
Run Code Online (Sandbox Code Playgroud)

是指每小时每隔一分钟0-59/2 0-23/1 * * 0-7执行一次吗?maxrun_sec 240如果是,那么它是什么,maxrun_sec因为它在脚本本身的任何地方都没有定义。部分如何理解::cisco::eem::event_register_timer cron name crontimer2 cron_entry

Don*_*ows 5

这些是命令调用,其中这些命令以完全限定的形式给出。双冒号 ( ::) 是名称空间分隔符,与文件系统类比,如果名称以分隔符开头,则将根据全局名称空间进行解析。

\n\n

例如,全局set命令可以等效地称为::set. 它的工作原理是一样的。如果您位于另一个定义了自己的set命令的命名空间中,这非常有用:

\n\n
namespace eval example {\n    proc set {} {\n        for {::set x 1} {$x <= 5} {incr i} {\n            puts "This is example::set with x = $x"\n        }\n    }\n\n    set\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,在您的情况下,该命令将以::cisco::eem::event_register_timer完全限定的形式调用。这应该被理解为名称空间event_register_timer中的命令eem,该命令本身位于cisco名称空间中,而名称空间又是全局名称空间的直接子级。它就像文件名一样,只不过它是多字符分隔符。

\n\n

(至于它的作用\xe2\x80\xa6查看Cisco文档。它不是标准的Tcl命令\xe2\x80\xa6)

\n