在 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]"
根据您的情况选择合适的。
我有一个变量 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]"
根据您的情况选择合适的。