2016-07-28 16 views
1

我只是做了在TCL 8.6以下實驗:TCL表達分析 - 爲什麼撐和支架被轉義不同

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

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

第一個命令對我來說很有意義:

  1. 因爲參數不第一輪解析是腳本級解析,反斜槓轉義被刪除:expr「{」ne「x」
  2. expr命令繼續解析,「{」和「x」是2引號文字,執行順利。

第二個命令中的錯誤沒有意義。唯一的區別是用支架替換支架,爲什麼它會失敗?

我知道支撐參數是期望表達的,這個問題主要是爲了理解TCL解析。

+0

命令被解析的方式,Tcl interp只是查找傳遞給expr命令的字符串參數。你的字符串參數\「\ [」看起來像在\ [字符後面開始一個字符串,但是該字符串沒有以結尾雙引號結尾。 – MoDJ

回答

1

第二個命令的問題是,expr命令將雙引號內的序列作爲命令替換處理[ ...... ]這與Tcl是否確實是無關,並且是總是支持整體表達的真正好主意的一部分。如果你使用:

expr \{\[\} ne \"x\" 

那麼它會工作;就像使用基本的Tcl語言一樣,expr不會以大括號引用的術語擴展命令替換。

相關問題