1

中括弧の引用符内では、すべての中括弧をエスケープする必要があるのはなぜですか(ネストにカウントされるべきではありません)、ブラケット置換内では、すべての括弧をエスケープする必要はありません (ネストにカウントされるべきではありません)。 )。

puts "}" ;# ok in top-level (1)
if {1} {puts "}"} ;# but not ok when inside a brace quote (2)

puts {]} ;# ok in top-level (3)
set output [puts {]}] ;# and still ok inside a bracket substitution (4)
4

1 に答える 1

4

インタープリターが単語の先頭に遭遇する{と、単語を取得するために一致するものを探します}(実行するコマンド名またはコマンドに送信する引数の 1 つ)。

しかし、インタプリタがエスケープ[されていない に遭遇すると、一致する を探しません]。スクリプト自体の解析を停止し、別のインタープリターを再帰的に呼び出します。そのインタープリターは、. に続く文字から解析を開始します[。例 4で を見つけると、{引用モードを開始するため、]は通常の文字として扱われます。

では、 も遭遇したときにインタープリターを再帰的に呼び出して{、例 2 のブレースの問題を取り除いてみませんか? 中かっこで引用している単語は常にスクリプトであるとは限らず、たとえそうであったとしても、すぐに実行されることはおそらくないからです。ブレースの引用は正確でなければなりません。パーサーは、スクリプト パーサーのように、文字が などの内部"にあるかどうかに基づいて、異なる方法で文字を処理することはできません。[]

于 2013-01-05T08:17:49.660 に答える