TCL: 连接变量和字符串

21

假设我们有一个变量'a'设置为12345:

set a 12345

现在我该如何设置一个新变量 'b',使其包含变量 'a' 和另一个字符串,比如说 9876 的值。

解决方法大致如下:

set a "12345"
set u "9876"

set b $a$u

但我不想指定$u,而是直接使用字符串..

7个回答

39

你可以这样做:

set b ${a}9876

或者,假设b被设置为空字符串或未定义:

append b $a 9876

$a 长时,调用 append 更加高效(请参考append 文档)。


嗨 Trey,好答案。在这些情况下使用双引号会更好吗?还是没有区别?例如:set b "${a}9876" - TrojanName
3
@Brian:Tcl并不关心这个,但如果这样做可以使格式更加美观,你可能会想这么做。 - Donal Fellows
2
只有当您尝试连接包含空格的内容时,才需要进行某种分组,具体取决于您是否还需要变量替换,可能需要使用 {} 或 ""。 - jk.
1
还有join命令,但据我了解,它主要用于字符串与字符串之间的连接。 - Raj
1
@Raj 要使用 join 命令,您需要创建一个列表,类似于 set b [join [list $a "9876"] ""] - Trey Jackson
感谢您的澄清,@TreyJackson。我之前缺少了那个信息。 - Raj

7

另一个选项是使用set命令。 因为 set a 给出了a的值,我们可以使用它来设置b的值,如下所示:

set b [set a]9876


4

或者,你可以使用 format 函数。

set b [format %s%s $a $u]


3
从Tcl 8.6.2版本开始,可以使用string cat解决这个问题。
set b [string cat $a 9876]

1

另一种选项是使用类似下面的concat命令。

set b [concat $a\9876]


0

我不明白你所说的直接字符串是什么意思... 我不确定你想要什么... 但是,如果你想要12349876的值,你可以这样做:

% set b [concat $a$u]
12349876

如果你想让 $a 或 $u 成为字符串的一部分,只需在所需变量前添加反斜杠 '\'。


-2

设置 myString 为 "Hello"

在 myString 后面添加 " World!"

输出 "$myString"

Hello World!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接