Variables $内的Tcl变量替换:

Variables $内的Tcl变量替换:,variables,tcl,substitution,Variables,Tcl,Substitution,如果我定义以下列表: set ::listofvariablesn [list {"inputfile" "Input file"}] set ::inputfile "Somefile or numbers" 我可以使用以下方法检查变量::inputfile是否存在: foreach a $::listofvariablesn { if {[info exists ::[lindex $a 0]]} { puts "Ok" } } 但我无法使用以下命令访问::in

如果我定义以下列表:

set ::listofvariablesn [list {"inputfile" "Input file"}]
set ::inputfile "Somefile or numbers"
我可以使用以下方法检查变量::inputfile是否存在:

foreach a $::listofvariablesn {
   if {[info exists ::[lindex $a 0]]} {
      puts "Ok" 
   }
}
但我无法使用以下命令访问::inputfile的值:

foreach a $::listofvariablesn {   
    if {[checkvl "Input file" $::[lindex $a 0] 1 0 0 0]} { 
        puts "Ok" 
    }
}
我得到了一个错误: 无法读取“:”:没有此类变量

有没有办法完成这个替换?我的意思是将$::[lindex$a 0]转换成$::inputfile,这样我就可以访问::inputfile的值


非常感谢这个
$
是一个快捷方式,不能做双重替换。 使用
set
命令:

if {[checkvl "Input file" [set ::[lindex $a 0]] 1 0 0 0]} { 

除了
$
的正楷形式,即
set
命令的单参数形式之外,还可以使用
upvar 0
创建变量别名(具有已知名称)。例如:

upvar 0 $a b
puts "exists: [info exists b]" 
puts "value: $b" 

对变量
b
所做的任何操作(除了更改
upvar
)都将对名为
$a
的变量执行

谢谢你,布拉德。这很好用。明天早上更改代码。