TCL表达式解析 - 为什么大括号和括号以不同的方式进行转义

时间:2016-07-28 13:43:09

标签: tcl

我刚刚在TCL 8.6中进行了以下实验:

% expr \"\{" ne \"x\"
1

% expr \"\[" ne \"x\"
extra characters after close-quote
in expression ""[" ne "x""

第一个命令对我有意义:

  1. 因为参数没有被括起来,所以第一轮解析是脚本级解析,反斜杠转义被删除:expr“{”ne“x”
  2. expr命令继续解析,“{”和“x”是2个引用的文字并且执行顺利。
  3. 第二个命令中的错误没有意义。唯一的区别是用支架替换支架,为什么会失败?

    我知道支持参数是预期的表达式,这个问题主要是为了理解TCL解析。

1 个答案:

答案 0 :(得分:2)

第二个命令的问题是expr命令在双引号内处理[ ... ]个序列作为命令替换。 这与Tcl是否无关,也是为什么始终支持整体表达式的一个好主意的一部分。如果你改为使用:

expr \{\[\} ne \"x\"
然后它会起作用;与基本Tcl语言一样,expr不会在括号引用的术语中扩展命令替换。