在列表中传递变量并期望其字面值

时间:2019-06-29 08:26:06

标签: tcl

我试图编写一个简单的脚本,在该脚本中,我从一些现有变量中创建一个列表,并在打印相同内容时期望其字面值:

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 

2 个答案:

答案 0 :(得分:1)

括号防止变量替换,因此请使用双引号代替

set results " address contact $testString "
puts $results
#  address contact John A. Smith, Mobile:001-445-4567-0987, Pin-556789

或使用subst之后强制替换:

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

或者,如果您实际上打算拥有一个列表,其中第一个元素是address,第二个contact,第三个元素是$testString的值,则可以使用{{3 }},除了输出看起来不同:

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

但是那样一来,如果您执行类似testString的操作,则可以返回lindex $results 2,而如果您使用任何较早的方法,则只会得到testString的第一个单词,即John

答案 1 :(得分:0)

当您这样做:

set results  { address contact $testString }

您正在创建一个文字字符串(无替换),并将其分配给一个变量。 {…}就是这样做的;就像Unix shell中的'single quotes'一样,只是可嵌套。

要在其中进行替换,请使用"双引号",或通过subst命令运行文字字符串:

set results " address contact $testString "
set results [subst { address contact $testString }]