簡體   English   中英

無支撐表達式中的空白

[英]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\}

基本上\\{ab\\}之間的空格數被忽略。

我知道 TCL 表達式應該支持參數。

我知道沒有人會認真編寫這樣的代碼。

我也能猜到是怎么回事:

  1. 在腳本級解析中,空格只是簡單地用作單詞分隔,一個或多個空格具有相同的效果。
  2. 當涉及到命令expr ,它無法訪問“原始”腳本,它只知道有兩個單詞, {ab} ,由一些空格分隔
  3. 所以只使用一個空格。

但是從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

文檔: exprTcl 語言語法摘要

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM