[英]white space in un-braced expression
有趣的相遇:
set v "\{a b\}"
expr $v eq \{a b\}
表達式命令按預期返回 true。 但以下也返回 true:
set v "\{a b\}"
expr $v eq \{a b\}
基本上\\{a
和b\\}
之間的空格數被忽略。
我知道 TCL 表達式應該支持參數。
我知道沒有人會認真編寫這樣的代碼。
我也能猜到是怎么回事:
expr
,它無法訪問“原始”腳本,它只知道有兩個單詞, {a
和b}
,由一些空格分隔但是從TCL作為一種編程語言的角度來看,它是一個bug嗎?
Tcl 語法的第三條規則說
命令的單詞由空格分隔(換行符除外,它們是命令分隔符)。
(命令名稱和參數字符串是單詞。)
expr
文檔中的第一個子句說
連接 args(在它們之間添加分隔符空格)
所以發生的事情是 Tcl 解析器將字符串expr $v eq \\{ab\\}
分解成五個單詞,丟棄它們之間的空白字符。 然后expr
命令將它的四個參數連接成一個字符串,每對之間有一個分隔符空格。
這與您對字符串執行 list 突變命令時看到的基本相同:
% set a {a b c}
a b c
% lappend a d
a b c d
文檔: expr , Tcl 語言語法摘要
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.