在列表中传递变量并期望其字面值
Pass variable in list and expect its literal value
我试图编写一个简单的脚本,其中我从一些现有变量中创建一个列表,当我打印相同的内容时期望它的字面值:
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 中的 'single quotes'
。
要在其中进行替换,您可以使用 "
双引号 "
,或者通过 subst
命令 运行 文字字符串:
set results " address contact $testString "
set results [subst { address contact $testString }]
大括号防止替换变量,因此请改用双引号:
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
的值,那么您可以使用 list
,只是输出看起来不同:
set results [list address contact $testString]
puts $results
# address contact {John A. Smith, Mobile:001-445-4567-0987, Pin-556789}
但是那样的话,如果你做 lindex $results 2
这样的事情,你可以得到 testString
,而如果你使用任何早期的方法,你只会得到 [=18] 的第一个单词=],即John
.
我试图编写一个简单的脚本,其中我从一些现有变量中创建一个列表,当我打印相同的内容时期望它的字面值:
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 中的 'single quotes'
。
要在其中进行替换,您可以使用 "
双引号 "
,或者通过 subst
命令 运行 文字字符串:
set results " address contact $testString "
set results [subst { address contact $testString }]
大括号防止替换变量,因此请改用双引号:
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
的值,那么您可以使用 list
,只是输出看起来不同:
set results [list address contact $testString]
puts $results
# address contact {John A. Smith, Mobile:001-445-4567-0987, Pin-556789}
但是那样的话,如果你做 lindex $results 2
这样的事情,你可以得到 testString
,而如果你使用任何早期的方法,你只会得到 [=18] 的第一个单词=],即John
.