tcl命令的花括号和双引号之间有什么区别

时间:2018-12-17 04:45:18

标签: tcl

在tcl命令中使用双引号而不是大括号时,有什么完全不同。例如:

regsub "$something" $var1 "$something2" var1

vs

regsub {$something} $var1 {$something2} var1

这个问题不仅限于regsub。即使使用set分配变量,我也看不出有什么区别。

2 个答案:

答案 0 :(得分:3)

双引号和花括号用于将单词组合在一起成为一个参数。双引号和大括号之间的区别在于,引号允许在组中进行替换,而大括号则防止替换。此规则适用于命令,变量和反斜杠替换。

用双引号和花括号分组。

set s Hello
=> Hello
puts stdout "The length of $s is [string length $s]."
=> The length of Hello is 5.
puts stdout {The length of $s is [string length $s].}
=> The length of $s is [string length $s].

在这里,Tcl解释器对puts的第二个参数进行变量和命令替换。在第三个命令中,防止替换,因此按原样打印字符串。

实际上,当必须将对参数的替换必须延迟到以后(或根本不做)时,使用大括号分组。示例包括循环,条件语句和过程声明。在简单的情况下,例如前面显示的puts命令,双引号很有用。

参考: Practical Programming in Tcl and Tk

答案 1 :(得分:0)

在大多数情况下,“”和{}之间的区别很明显,但是从表面上看,情况可能与您期望的有所不同。 例如,引号之间的花括号没有特殊含义。

如果您写:

set x "hello"
puts "{$x}"

您将得到:

"{hello}"

string length {$x}
==> 2
string length "{$x}"
==> 7

因此在使用大括号和引号时要小心。

您可以在以下位置找到关于Tcl来龙去脉的清晰详尽的解释: https://ipenv.com/ins-and-outs-tcltk