Tcl 如何获得我想要的输出?

Tcl 如何获得我想要的输出?,tcl,Tcl,有人能指出我下面的tcl脚本有什么问题吗。。。我是tcl的新手,我试图弄清楚如何获得我想要的输出 我希望“for循环”打印出descLvds1,descLvds2的内容描述LVDS8这是“LVDS1环回”、“LVDS2环回”。。。“LVDS8环回”但我无法获得我想要的输出。。。这是代码的一部分,问题出在$descLvds$i,非常感谢您的帮助 set descLvds1 "LVDS 1 loopback" set descLvds2 "LVDS 2 loopback" ... set descL

有人能指出我下面的tcl脚本有什么问题吗。。。我是tcl的新手,我试图弄清楚如何获得我想要的输出

我希望“for循环”打印出
descLvds1
descLvds2
的内容<代码>描述LVDS8这是“LVDS1环回”、“LVDS2环回”。。。“LVDS8环回”但我无法获得我想要的输出。。。这是代码的一部分,问题出在
$descLvds$i
,非常感谢您的帮助

set descLvds1 "LVDS 1 loopback"
set descLvds2 "LVDS 2 loopback"
...
set descLvds8 "LVDS 8 loopback"

for {set i 1} {$i < 9 } {incr i} {
    puts "Chan$i $descLvds$i"
}
set descLvds1“LVDS 1环回”
设置descLvds2“LVDS 2环回”
...
设置descLvds8“LVDS 8环回”
对于{set i 1}{$i<9}{incr i}{
放入“Chan$i$descLvds$i”
}

您可以同时使用
set
设置变量值和获取变量值。要获取具有从其他变量计算的名称的变量的值,可以使用变量替换(例如:
$i
)创建变量名称,然后使用
set
获取该变量的值

例如:

for {set i 1} {$i < 9 } {incr i} {
    set varname "descLvds$i"
    puts "Chan$i [set $varname]"
}
对于{set i 1}{$i<9}{incr i}{
设置varname“descLvds$i”
放入“Chan$i[set$varname]”
}
如果需要,可以将这两行合并为一行:

for {set i 1} {$i < 9 } {incr i} {
    puts "Chan$i [set descLvds$i]"
}
对于{set i 1}{$i<9}{incr i}{
放置“Chan$i[设置描述$i]”
}

理想情况下,这些变量的名称应该稍有不同,以便使用关联数组元素。这样你就可以做到:

set descLvds(1) "LVDS 1 loopback"
set descLvds(2) "LVDS 2 loopback"
...
set descLvds(8) "LVDS 8 loopback"

for {set i 1} {$i < 9 } {incr i} {
    puts "Chan$i $descLvds($i)"
}
设置描述LVDS(1)“LVDS 1环回”
设置描述LVDS(2)“LVDS 2环回”
...
设置描述LVDS(8)“LVDS 8环回”
对于{set i 1}{$i<9}{incr i}{
放入“Chan$i$descLvds($i)”
}

这确实有效。

可能是因为为您的问题制作了一个缩写示例,但是如果输入元素遵循词法顺序(
descLvds1
descLvds2
,…),那么您可以使用
lappend
foreach
循环将其添加到列表中:

lappend descLvds "LVDS 1 loopback"
lappend descLvds "LVDS 2 loopback"
# ...
lappend descLvds "LVDS 8 loopback"

foreach descLvd $descLvds {
    puts $descLvd
}

布莱恩,它工作得很好,多亏了你的快速回答。。。Chan1 LVDS 1 loopback Chan2 LVDS 2 loopback Chan3 LVDS 3 loopback Chan4 LVDS 4 loopback Chan5 LVDS 5 loopback Chan6 LVDS 6 loopback Chan7 LVDS 7 loopback这是因为当Tcl解析一段代码时,它只执行一轮变量替换。花一些时间学习(只有12个),那么,你可能想考虑接受一个答案呢?