Tcl中列表中的变量替换

sko*_*ada 3 list tcl variable-substitution

我正在尝试替换列表中的变量:

% set a 1  
1  
% set b {1 $a}  
1 $a  
%  
% set a 1  
1  
% set b [list 1 $a]  
1 1  
Run Code Online (Sandbox Code Playgroud)

当我使用花括号{}来定义列表时,变量 'a' 不会被替换为它的值,但在使用list它的情况下会替换。

使用定义的列表时如何替换变量的值{}

Pet*_*rin 5

% set a 1
1
% subst {1 $a}
1 1
% set b [subst {1 $a}]
1 1
Run Code Online (Sandbox Code Playgroud)

但是大多数 Tcl:ers 实际上更喜欢list在创建带有替换的列表值时使用,就像在你的第二次尝试中一样:

% set b [list 1 $a]
Run Code Online (Sandbox Code Playgroud)

原因之一是subst不会在值中保留列表结构:

% set a {a b}
a b
% set b [subst {1 $a}]
1 a b
% set b [list 1 $a]
1 {a b}
Run Code Online (Sandbox Code Playgroud)

另一种可能性是使用双引号而不是大括号;这也不会保留列表结构。

% set b "1 $a"
1 a b
Run Code Online (Sandbox Code Playgroud)

文档: listsetsubstTcl 语言语法摘要