1

我正在使用以下脚本,但它抛出错误消息
tcl;

eval {
     add command "Audit Param"\
     setting "Error : Part's and Spec's desc contains \"OBS\" or \"REPLACE\"" "(Reference No)"\
     user all;
}  

它显示错误为:Expected word got 'and'
我试过了Part\'s,但仍然无法正常工作。如果两者都有,如何同时转义单引号和双引号?

4

1 回答 1

4

单引号和 Tcl

在 Tcl 本身中,单引号字符 ( ') 根本没有特殊含义。它只是一个普通字符,如逗号 ( ,) 或句点 ( .)。(嗯,除了逗号在表达式中具有特殊含义,而句点用于浮点值和 Tk 小部件名称。相比之下,单引号根本没有意义。)根据您所写的,任何特殊含义(因此任何需要引用) 仅限于add命令。

复杂的引用情况通常在 Tcl 中通过使用不同的引用策略来解决。特别是,将东西放在大括号中会禁用所有替换(反斜杠换行空格折叠除外)。这让我可以写出与您所写内容等效的内容:

add command "Audit Param" \
      setting {Error : Part's and Spec's desc contains "OBS" or "REPLACE"} \
      "(Reference No)" user all

这里的任何投诉都来自该代码内部,而不是在代码本身中编写。(这eval { ... }并没有增加任何东西。除了使您的代码更难阅读之外,它也不会产生任何惩罚。)

真正的问题

在一个非常松散的猜测中,该问题字符串正在使用直接字符串替换而不是准备参数的 SQL 语句中使用;这可能会产生那种错误信息。发生故障后检查全局errorInfo变量的内容,以获取堆栈跟踪,以帮助确定问题所在;这可能会帮助您了解代码失败的地方。如果它是一段顽皮的 SQL,则需要修复代码,因为您有一些易受 SQL 注入问题影响的东西(这可能是也可能不是安全问题,具体取决于该命令的暴露情况)。如果是这种情况,将每个单引号加倍(更改''')应该可以在短期内解决问题。

于 2012-09-04T19:16:46.327 回答