我想在TCL中将以下错误消息设置为变量,并与来自网络交换机的错误消息进行比较,绕过特殊字符
使用[slot / port]或[“portname”]或[slot / *]或[*]。
我试过这种方式
set x "Use \[slot/port] or \["portname"] or \[slot/\*] or \[\*]."
但我在运行脚本时收到以下消息:
关闭引用后的额外字符 执行时
请帮忙。谢谢!
答案 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对此非常满意。