TCL中subst解析变量异常,如何通过变量名获取目标值?
TCL变量名含特殊字符的取值问题
你遇到的问题是因为TCL解析变量名时,会把$a.b拆成$a(变量a的值1)和字符串.b,所以输出了1.b。要直接获取带.的变量a.b的值,最简单的方法是用set命令的单参数形式:
修正后的代码:
set a 1 set a.b a set thing a.b puts [set $thing]
原理很简单:$thing会先被替换成a.b,然后set a.b就会返回这个变量存储的值"a",正好符合你的预期。
另外也可以用subst配合大括号明确变量范围,不过写法更繁琐:
puts [subst {$($thing)}]
这里的$($thing)会先解析内层的$thing得到a.b,再通过大括号明确变量名范围来获取对应值,不过显然第一种方法更直接好用。
内容的提问来源于stack exchange,提问作者heyhey
相关产品推荐
相关产品推荐

