x是设备名称( device -1、device-2、device-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语句中。
发布于 2013-01-11 04:57:53
要读取名称中包含插值的变量,请使用单参数set
set withoutadash [set device-${x}port]一般来说,最好使用数组来处理这类事情。
发布于 2013-01-11 07:11:13
处理这种复杂变量的最好方法之一是使用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}]https://stackoverflow.com/questions/14267079
复制相似问题