我试图编写一个简单的脚本,在该脚本中,我从一些现有变量中创建一个列表,并在打印相同内容时期望其字面值:
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
答案 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 }]