在TCL中逃脱单引号和双引号

时间:2012-09-04 18:48:40

标签: tcl

我正在使用以下脚本,但它正在抛出错误消息
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,但仍然无法正常工作。如果同时拥有两个引号,如何逃避单引号和双引号?

1 个答案:

答案 0 :(得分:3)

单引号和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注入问题的攻击(这可能是也可能不是安全问题,具体取决于该命令的暴露程度)。如果是这种情况,将每个单引号加倍(将'更改为'')应该可以在短期内解决问题。