在 TCL 中连接两个字符串形成文件名

问题描述 投票:0回答:4

我无法让它工作。

set dut xyz
set fname [join {$dut "-CE"} ""]

但是这有效:

set fname [join {xyz "-CE"} ""]

我希望 fname 为“xyz-CE”

list join tcl
4个回答
5
投票

尝试以下方法

set dut xyz
set fname ${dut}-CE

普通的单词连接不需要

join


0
投票

AS Glenn 说大括号不支持变量替换,所以用双引号将其分组 像这样

set dut xyz
set fname [join "$dut -CE" ""]

0
投票

尝试

set dut xyz
eval set fname [join {$dut "-CE"} ""]

它给了

xyz-CE

0
投票

虽然您可以将其视为加入列表,但如果您将其视为串联,则可以使用更简单的方法来完成此操作。本着“有不止一种方法可以做到这一点”的精神......

简单的变量替换适用于您在此处使用的变量名称(

$
的解析规则意味着它将在
-
字符处停止):

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
命令,但它返回一个列表(元素之间用空格分隔,这不是你想要的)。

© www.soinside.com 2019 - 2024. All rights reserved.