1
をエスケープしている理由私はTCL 8.6の次の実験でした:TCL式の解析 - ブレースとブラケットが異なっ
% expr \"\{" ne \"x\"
1
% expr \"\[" ne \"x\"
extra characters after close-quote
in expression ""[" ne "x""
最初のコマンドは、私には理にかなって:
- 引数がないので最初のラウンド解析はスクリプトレベルの解析であり、バックスラッシュエスケープは削除されます。expr "{" ne "x"
- exprコマンドは解析を続け、 "{"と "x"は2つの引用符で囲まれたリテラルであり、
2番目のコマンドのエラーは意味をなさないものです。唯一の違いは、ブラケットをブレースで置き換えることです。なぜ失敗しますか?
私は、引数の補足が期待されていることを知っていますが、この質問は主にTCL解析を理解することです。
コマンドが解析される方法は、Tclはexprコマンドに渡す文字列引数を探します。あなたの文字列引数\ "\ ["は\ [文字の後に文字列を始めるが、その文字列は閉じた二重引用符で終わらないように見える。 – MoDJ