在 TCL 中评估变量的最快方法

Quickest way to evaluate a variable in TCL

我有一个变量 myref 设置为:

set myref {$expect_out(buffer)}

$expect_out(buffer) 放入 myval 的最快方法是什么?

set myval [HOWTOEVAL $myref]

我认为这会成功

set myval [subst $$myref]

首先替换 $myref,然后用第二个 $

替换该值

这是上面的一个例子,我认为这是你想要的:

set a 12
12
set b a
a
set c [subst $$b]
12

您不能使用 $$ 来双重取消引用。但是,您可以使用仅带有单个参数的 set 命令从变量中读取值。所以:

set myval [set $myref]

set 语句的求值首先扩展 $myref 得到 $expect_out(buffer) 字符串,然后这是 set 命令本身的参数并被求值return 该变量名的值。

% set a(test) hello
hello
% set name "a(test)"
a(test)
% set b [set $name]
hello

如果您有一个仅包含变量的 name 的字符串,您最好使用仅带有一个参数的 set

set myref {expect_out(buffer)}
puts "The value is [set $myref]"

但是,如果您还有 $ ,正确的做法是使用 subst(这意味着“假装这是双引号中的内容”):

set myref {$expect_out(buffer)}
puts "The value is [subst $myref]"

根据您的情况选择合适的。