期望变量

时间:2015-11-16 20:42:20

标签: tcl expect

作为一个例子,假设我已经定义了几个变量,然后我用变量调用变量。 $ interface $ counter的正确语法是什么?

set interface0 $env(interface0)
set interface1 $env(interface1)
set interface2 $env(interface2)

for {set i 0} {$i < $3} {incr i 1} {
puts $interface$i
}

2 个答案:

答案 0 :(得分:2)

set interface0 A
set interface1 B
set interface2 C

for {set i 0} {$i < 3} {incr i 1} {
    puts [set interface$i]
}

动态变量名称始终是要使用的PITA。你需要让Tcl进行2轮替换:首先构造变量名,然后第二个来提取值。

使用数组更容易。您可以直接获得该值

array set interface {}
set interface(0) A
set interface(1) B
set interface(2) C

for {set i 0} {$i < 3} {incr i 1} {
    puts $interface($i)
}

或使用字典

set interface [dict create]
dict set interface 0 A
dict set interface 1 B
dict set interface 2 C

for {set i 0} {$i < 3} {incr i 1} {
    puts [dict get $interface $i]
}

但是,在这种情况下,您只需要单调递增整数值:您需要一个列表:

set interfaces [list $env(interface0) $env(interface1) $env(interface2)]

for {set i 0} {$i < $3} {incr i 1} {
    puts [lindex $interfaces $i]
}

答案 1 :(得分:1)

可以是:

for {set i 0} {$i < 3} {incr i 1} {
send "This is count [set interface$i]\n"
}

谢谢