【问题标题】:TCL set Special Characters in a stringTCL 在字符串中设置特殊字符
【发布时间】:2020-03-28 05:31:50
【问题描述】:

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

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

我是这样尝试的

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

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

右引号后的额外字符 执行时

请帮忙。谢谢!

【问题讨论】:

    标签: tcl


    【解决方案1】:

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

    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

    【讨论】:

      【解决方案2】:

      好吧,你可以用花括号把它包起来,如下所示:

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

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

      【讨论】:

        【解决方案3】:

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

        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 对此非常满意。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多