Tcl 在列表中传递变量并期望其文本值

Tcl 在列表中传递变量并期望其文本值,tcl,Tcl,我试着编写一个简单的脚本,在这个脚本中,我用一些现有变量创建了一个列表,当我打印同一个变量时,我期望它的文本值: set testString "John A. Smith, Mobile:001-445-4567-0987, Pin-556789" set results { address contact $testString } puts $results 但我得到以下输出: address contact $testString 我期待的地方-我如何实现同样的目标: addre

我试着编写一个简单的脚本,在这个脚本中,我用一些现有变量创建了一个列表,当我打印同一个变量时,我期望它的文本值:

set testString "John A. Smith, Mobile:001-445-4567-0987, Pin-556789"
set results  { address contact $testString }
puts $results
但我得到以下输出:

address contact $testString 
我期待的地方-我如何实现同样的目标:

address contact John A. Smith, Mobile:001-445-4567-0987, Pin-556789 
当您这样做时:

set results  { address contact $testString }
您正在创建一个文字字符串(无替换)并将其分配给变量。这就是
{…}
所做的;它与Unix shell中的
“单引号”
类似,只是可嵌套

要在其中获得替换,可以使用
双引号
,或者通过
subst
命令运行文本字符串:

set results " address contact $testString "

大括号防止替换变量,因此请改用双引号:

set results " address contact $testString "
puts $results
#  address contact John A. Smith, Mobile:001-445-4567-0987, Pin-556789
或用于事后强制替换:

set results { address contact $testString }
set results [subst $results]
puts $results
#  address contact John A. Smith, Mobile:001-445-4567-0987, Pin-556789
或者,如果您实际上想要有一个列表,其中第一个元素是
地址
,第二个元素是
联系人
,第三个元素是
$testString
的值,那么您可以使用,但输出看起来会有所不同:

set results [list address contact $testString]
puts $results
# address contact {John A. Smith, Mobile:001-445-4567-0987, Pin-556789}
但是这样,如果您执行类似于
lindex$results 2
的操作,您可以返回
testString
,而如果您使用任何早期方法,您将只获得
testString
的第一个单词,即
John

set results [list address contact $testString]
puts $results
# address contact {John A. Smith, Mobile:001-445-4567-0987, Pin-556789}