Tcl eval命令对我无效

Tcl eval命令对我无效,tcl,Tcl,在本例中,命令 % set a 1 % set a 1 % set 1 puts hai % % puts [eval "$$a"] invalid command name "puts hai" % % % % puts [eval [subst "$$a"]] hai % 上述命令不起作用。。谁能帮我一下吗。。找出这个陈述的问题 您有两次put,这就是问题所在: % puts [eval "$$a"] invalid command name "puts hai" % “eval$$a

在本例中,命令

% set a
1
% set a
1
% set 1
puts hai
%

% puts [eval "$$a"]
invalid command name "puts hai"
%
%
%
% puts [eval [subst "$$a"]]
hai
%

上述命令不起作用。。谁能帮我一下吗。。找出这个陈述的问题

您有两次
put
,这就是问题所在:

% puts [eval "$$a"]
invalid command name "puts hai"
%

“eval$$a”此命令是否正常工作,Tcl解释器最初通过命令并将首先替换“$a”值,在第二次eval工作时,eval命令应在执行命令之前替换变量。
eval$$a
不工作。Tcl解释器只执行一次变量替换。在这段时间内,表达式变为
eval$1
,但解释器不会再次替换,因此
$1
不会变为
。您所说的一切都是正确的。。但是我得到的输出是无效的命令。i、 e,$1值正在替换“%eval$$a无效的命令名”将“%”,
[set$a]
是执行双解引用的正式方法。
% set 1
puts hai

% set a
1

% eval $1; # de-reference
hai

% eval [set 1]; # another way to de-reference
hai


% eval [set $a]; # Double de-reference
hai