$ ::里面的Tcl变量替换

时间:2017-05-02 14:36:45

标签: 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" 
   }
}

但我无法使用:

访问:: inputfile的值
foreach a $::listofvariablesn {   
    if {[checkvl "Input file" $::[lindex $a 0] 1 0 0 0]} { 
        puts "Ok" 
    }
}

我收到了错误: 无法读取“::”:没有这样的变量

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

的值

非常感谢

2 个答案:

答案 0 :(得分:2)

$是一种快捷方式,不能进行双重替换。 使用set命令:

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

答案 1 :(得分:0)

$的缩写形式set命令的单参数形式外,还可以选择使用{{创建变量的别名(具有已知名称) 1}}。例如:

upvar 0

您对变量upvar 0 $a b puts "exists: [info exists b]" puts "value: $b" 执行的任何操作(更改b除外)都将对upvar命名的变量执行。