我正在使用以下脚本,但它正在抛出错误消息
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
,但仍然无法正常工作。如果同时拥有两个引号,如何逃避单引号和双引号?
答案 0 :(得分:3)
在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注入问题的攻击(这可能是也可能不是安全问题,具体取决于该命令的暴露程度)。如果是这种情况,将每个单引号加倍(将'
更改为''
)应该可以在短期内解决问题。