uplevel command ...
将起参数连接起来(象是在concat中)。最后在由level所指定的上下文中来执行。如果level是一个整数,给出了在栈中的距离(是跳到其它的命令环境中来执行)。缺省为1(即上一层)。
如:
#!/usr/bin/tcl
proc ff {} {
set a "ff" //设置了局部的a
-------------------------
}
set a "global"
ff
puts $a
//return "global"
再看下一个:
#!/usr/bin/tcl
proc ff {} {
uplevel set a "ff" //改变上一级栈中的a
-------------------------------------
}
set a global
ff
puts $a
//return "ff"
如果level是以#开头后接一个整数,则level指出了在栈中的绝对位置。如#0表示了顶层(top-level)。
a b c 分别为三个命令,下面是它们之间的调用关系,
top-level -> a -> b -> c -> uplevel level
绝对位置: 0 1 2 3
当level为 1 或 #2 都是在 b 的环境中来执行。
3 或 #0 都是在 top-level 的环境中来执行。
upvar ?level? otherVar myVar ?otherVar myVar ...?
在不同的栈中为变量建立连接。这里的level与uplevel中的level是同样风格的。
例如:
#!/usr/bin/tcl
proc ff {name } {
upvar $name x
set x "ff"
}
set a "global"
ff a
puts $a
//return "ff"
================================
http://www.tclchina.com/article/translation/tcl_hanchan_intro/tcl_hanchan_cn.htm
upvar 也可以被用于访问在调用栈的不同层次上的变量。
upvar #0 other x
通过本地变量 x 来使全局变量 other 可访问(#0 指定访问全局变量 other 而不管调用栈的层次)。
upvar 2 other x
使在当前的过程的调用者的调用者中的变量 other 作为本地变量 x 访问(2 指定在调用栈中两层之上)。
#!/usr/bin/expect -f
set force_conservative 0
set timeout -1
spawn $env(SHELL)
match_max 100000
send -- "telnet 172.16.67.199\r"
expect "login: "
send -- "admin\r"
expect "Password: "
send -- "\r"
send -- "config system global\r"
expect "#"
No comments:
Post a Comment