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}