TCL在字符串中设置特殊字符

时间:2013-06-19 10:01:44

标签: tcl

我想在TCL中将以下错误消息设置为变量,并与来自网络交换机的错误消息进行比较,绕过特殊字符

  

使用[slot / port]或[“portname”]或[slot / *]或[*]。

我试过这种方式

set x "Use \[slot/port] or \["portname"] or \[slot/\*] or \[\*]."

但我在运行脚本时收到以下消息:

  

关闭引用后的额外字符   执行时

请帮忙。谢谢!

3 个答案:

答案 0 :(得分:10)

如果使用双引号,则还必须转义“内部”引号:

set x "Use \[slot/port] or \[\"portname\"] or \[slot/*] or \[*]."

或者使用大括号并避免完全逃避

set x {Use [slot/port] or ["portname"] or [slot/*] or [*].}

Tcl's 12 syntax rules,数字4和6

答案 1 :(得分:3)

好吧,您可以使用大括号括起来,如下所示:

set x {Use [slot/port] or ["portname"] or [slot/] or [].}

或者,您可以使用反斜杠转义特殊字符。

答案 2 :(得分:1)

也可以在引用的字符串中转义双引号。或者使用大括号对字符串进行分组,而不会发生任何命令或变量替换。

set s {Use [slot/port] or ["portname"] or [slot/*] or [*].}
puts $s
set s "Use \[slot/port\] or \[\"portname\"\] or \[slot/*\] or \[*\]."
puts $s

你需要继续阅读关于引用的文档,直到你明白为什么这样做是正确的,你的例子被打破了,否则你的脚本会遇到无穷无尽的问题。

请注意,stackoverflow上实现的代码着色将显示支撑不良的版本。然而,Tcl对此非常满意。