TCL获取连接变量的值

时间:2013-01-10 20:53:16

标签: tcl

x是设备名称列表(设备-1,设备-2,设备-3) 通过连接字符串端口为每个device1创建一个变量,最终得到$device-1port

循环遍历x创建

[expr $${x}port-2000 ]   #x is device-1 so it is trying $device-1port-2000 which throws error.

我想将$device-1port的数值变为没有短划线的变量。

set xvar $${x}port

[expr $xvar-2000 ]

或者我可以将$${x}port包装在expr语句中。

2 个答案:

答案 0 :(得分:3)

要读取名称中带插值的变量,请使用单参数set

set withoutadash [set device-${x}port]

通常,最好将数组用于此类事情。

答案 1 :(得分:0)

使用这些复杂变量的最好方法之一是使用upvar命令为变量创建一个本地“漂亮”别名。特别是,upvar 0为局部变量创建了一个局部别名;有点棘手,但是一种已知的技术。

upvar 0 ${x}port current_port

现在,我们对current_port的读取,写入或取消设置与具有尴尬名称的端口的读/写/取消设置相同,您可以简单地编写代码:

puts [expr { $current_port - 2000 }]
set current_port 12345
# etc.

在当前程序结束时将忘记别名。


当然,您可能应该考虑使用数组。它们只是更简单,您不需要努力使用计算变量名称:

set x 1
set device($x,port) 12345
puts [expr {$device($x,port) - 2000}]