我无法让它工作。
set dut xyz
set fname [join {$dut "-CE"} ""]
但是这有效:
set fname [join {xyz "-CE"} ""]
我希望 fname 为“xyz-CE”
尝试以下方法
set dut xyz
set fname ${dut}-CE
普通的单词连接不需要
join
。
AS Glenn 说大括号不支持变量替换,所以用双引号将其分组 像这样
set dut xyz
set fname [join "$dut -CE" ""]
尝试
set dut xyz
eval set fname [join {$dut "-CE"} ""]
它给了
xyz-CE
虽然您可以将其视为加入列表,但如果您将其视为串联,则可以使用更简单的方法来完成此操作。本着“有不止一种方法可以做到这一点”的精神......
简单的变量替换适用于您在此处使用的变量名称(
$
的解析规则意味着它将在-
字符处停止):
set dut xyz
set fname "$dut-CE"
你甚至不需要引号(在 Tcl 中,一切都是字符串):
set dut xyz
set fname $dut-CE
您可以使用大括号明确分隔变量名称:
set dut xyz
set fname ${dut}-CE
您还可以使用显式子命令来检索
dut
的值(带有一个参数的 set
返回该变量的值):
set dut xyz
set fname [set dut]-CE
如果
fname
未设置或包含空字符串,您可以使用 append
(但请注意,append
操作将是非幂等:后续调用将继续附加到 的现有值) fname
):
set dut xyz
append fname $dut -CE
join
(将列表转换为字符串)来执行此操作,请使用 list
命令创建列表,以便对 $dut
进行求值(大括号可防止变量替换)。我们指定空字符串 ""
作为 join
分隔符,默认为空格。
set dut xyz
set fname [join [list $dut -CE] ""]
concat
命令,但它返回一个列表(元素之间用空格分隔,这不是你想要的)。