1

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

使用 [slot/port] 或 ["portname"] 或 [slot/*] 或 [*]。

我试过这样

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

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

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

请帮忙。谢谢!

4

3 回答 3

11

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

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

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

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

参见Tcl 的 12 条语法规则,数字 4 和 6

于 2013-06-19T10:28:26.967 回答
4

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

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

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

于 2013-06-19T10:28:47.053 回答
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 对此非常满意。

于 2013-06-19T10:29:50.020 回答