在tcl命令中使用双引号而不是大括号时,有什么完全不同。例如:
regsub "$something" $var1 "$something2" var1
vs
regsub {$something} $var1 {$something2} var1
这个问题不仅限于regsub。即使使用set
分配变量,我也看不出有什么区别。
答案 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命令,双引号很有用。
答案 1 :(得分:0)
在大多数情况下,“”和{}之间的区别很明显,但是从表面上看,情况可能与您期望的有所不同。 例如,引号之间的花括号没有特殊含义。
如果您写:
set x "hello"
puts "{$x}"
您将得到:
"{hello}"
和
string length {$x}
==> 2
string length "{$x}"
==> 7
因此在使用大括号和引号时要小心。
您可以在以下位置找到关于Tcl来龙去脉的清晰详尽的解释: https://ipenv.com/ins-and-outs-tcltk