在TCL中以双冒号开头的行的目的是什么?

时间:2015-05-22 09:29:04

标签: tcl

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

::cisco::eem::event_register_timer cron name crontimer2 cron_entry $_cron_entry maxrun_sec 240

这个$_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

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

1 个答案:

答案 0 :(得分:2)

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

例如,全局set命令可以等效地调用::set。它的工作方式相同。如果您在另一个定义自己的set命令的命名空间中,这非常有用:

namespace eval example {
    proc set {} {
        for {::set x 1} {$x <= 5} {incr i} {
            puts "This is example::set with x = $x"
        }
    }

    set
}

现在,在您的情况下,该命令以完全限定的形式称为::cisco::eem::event_register_timer。这应该被视为event_register_timer命名空间中的eem命令,该命令本身位于cisco命名空间中,而后者又是全局命名空间的直接子节点。它与文件名一样,除了它是一个多字符分隔符。

(至于它做什么......查看思科文档。它不是标准的Tcl命令......)