引用 Tcl 参数

Quote Tcl argument

我在 Tcl 中有一个引用问题。我有一长串信号,在 for 循环中我将每个信号分配给 my_sig 然后解析它。

foreach sig $list_of_sigs {
    set my_sig $sig
}

我得到的一个例子是:

set my_sig top.sub.sig[0]

如何在命令中使用 my_sig 以便“[”和“]”自动转义?例如,我的命令接受:

my_command -filter signal_bit=="top.sub.sig\[0\]"

谢谢!

尝试

set my_sig {top.sub.sig[0]}
my_command -filter signal_bit==$my_sig

您可以使用正则表达式来转义特殊字符。

regsub -all {([\[\]])} $sig "\\\1" sig

参考文献:regsub re_syntax

您通常不必这样做,因为除非明确要求,否则 Tcl 不会重新解释变量的内容。有些东西再次扩大了价值,你可能应该追查它,因为它在形式上实际上是不安全的,而且这也往往与代码缓慢相关。

也就是说,使用 string map 添加引号非常容易。只需注意反斜杠的引用即可。

foreach sig $list_of_sigs {
    set my_sig [string map {[ {\[} ] {\]}} $sig]
    # ... etc ...
}