なぜそれは中括弧引用符の中で、あなたは脱出しなければならないのですか? すべて 中括弧で囲む必要はありませんが、中かっこの中では、すべての括弧を逃さなければなりません(入れ子にする必要はありません)。
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)
回答:
回答№1は4通訳者が出会うと {
単語の冒頭で、それは一致を探します }
単語(実行するコマンド名、またはコマンドに送る引数の1つ)を取得します。
しかし、インタプリタがエスケープされていないエスケープされた [
、それはマッチングを探すことはありません ]
。スクリプト自体の解析を停止し、別のインタープリタを再帰的に呼び出します。そのインタプリタは、 [
。それが見つかると {
例4では、引用モードを開始するので、 ]
通常の文字のように扱われます。
それでは、なぜ、インタープリタを再帰的に呼び出さないのですか? {
も遭遇し、例2のブレース問題?あなたが中括弧で引用している言葉は常にスクリプトではないので、たとえそれがあっても、すぐに実行されるはずはないでしょう。中括弧引用は厳密でなければならず、パーサーは彼らが内部にいるならば "
, []
etc ...スクリプトパーサーのように、そうでないかどうかはわかりません。