引用Tcl参数

时间:2016-07-05 20:30:03

标签: escaping tcl quotes

我在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\]"

谢谢!

3 个答案:

答案 0 :(得分:1)

尝试

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

答案 1 :(得分:1)

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

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

参考文献:regsub re_syntax

答案 2 :(得分:1)

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

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

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