基本上,我正在做的是
set i 0
set log_$i "blah blah"
puts $log_$i; # expecting to see "blah blah"
这会返回错误:
无法读取“log_”:没有这样的变量
我尝试了所有不同类型的分组,似乎没有任何工作
答案 0 :(得分:11)
您遇到的问题是$
- 当遇到$
(以及其他许多标点符号)时,替换也会停止。
要使你正在做的工作,你要这样做来读取变量(使用set
命令的单参数形式):
puts [set log_$i]
这完全符合您期望的那种字节码。
如果可以避免,请不要这样做。
每当你考虑构建这样的变量时,你就更有可能需要使用数组:
set i 0
set log($i) "blah blah"
puts $log($i)
工作。如果你真的需要处理一个名字被构造的变量,那么通常更容易构造一个(通常是局部的)变量别名:
set i 0
upvar 0 log_$i v
set v "blah blah"
puts $v
upvar
命令是棘手的东西,并允许各种非常强大的技术。它还使变量的本地别名非常有效(尽管此别名不包括每次查找变量;如果希望别名指向其他内容,则需要重新运行upvar
。
答案 1 :(得分:0)
另一种做法是
==> tclsh的
% set i 0
0
% set log[set i] bb
bb
% puts "[set log[set i]]"
bb
答案 2 :(得分:0)
另一种方式:
% set i 0
0
% set log(0) "blah blah"
blah blah
% puts $log($i)
blah blah