引用 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
您通常不必这样做,因为除非明确要求,否则 Tcl 不会重新解释变量的内容。有些东西再次扩大了价值,你可能应该追查它,因为它在形式上实际上是不安全的,而且这也往往与代码缓慢相关。
也就是说,使用 string map
添加引号非常容易。只需注意反斜杠的引用即可。
foreach sig $list_of_sigs {
set my_sig [string map {[ {\[} ] {\]}} $sig]
# ... etc ...
}
我在 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
您通常不必这样做,因为除非明确要求,否则 Tcl 不会重新解释变量的内容。有些东西再次扩大了价值,你可能应该追查它,因为它在形式上实际上是不安全的,而且这也往往与代码缓慢相关。
也就是说,使用 string map
添加引号非常容易。只需注意反斜杠的引用即可。
foreach sig $list_of_sigs {
set my_sig [string map {[ {\[} ] {\]}} $sig]
# ... etc ...
}