わかりました、だから私はこれがどのように機能するのか理解できないようです. 「switch -regexp -- $line {」(および基本的にファイルの残りの部分) 内から呼び出された「\t」(「#」アーム行 1) の実行中に、実行時に添付コードが無効なコマンド名「」になる
私はこの問題に遭遇し、最終的に # がそれを実行していることに気付きました。regsub を使用してエスケープしようとしました (以下を参照)。解析する文字列を取得できる唯一の方法は、文字列から # をすべて一緒に削除することです (inputString を変更して # 記号を削除します)。
TCL はすべての行をテキスト (コマンドを含む) として読み取るというステートメントに基づいて、読み取られている文字列に # が含まれていて、行を完成させることができず、もちろんエラーが返されたと推測することしかできませんでした。ただし、エスケープ (1 つの \ と 2 つの \ を試しました) は、それを改善するために何もしませんでした。それがしたことは、他のすべての「単語以外の文字」に \ を追加することだけでした (- は正常に機能しましたが、現在は \ を持っています)の...:S)
スイッチ セクション {^[ \t] TEST. $} は問題なく動作します。
スクリプトを変更していて、特定のいくつかのケースを無視していたため、それらをコメントアウトすることにしました。
一体何が起こっているのか、それを修正するために何ができるのかを誰かが説明できますか? .tcl ファイルは、コメントであっても # セクションを解析していて、混乱しているようです。
修正を試みる
regsub -all {\W} $line {\\&} line;
コード:
proc doConversion fname {
set inputString "* |# Bits\n* # Bits \n";
foreach line [split $inputString "\n"] {
switch -regexp -- $line {
# {^[ \t]*TEST.*$}
# {
# # Do nothing
# }
default {
}
}
}
}
doConversion "test"
更新: コメントの紛らわしい性質を (ある程度) 説明しているこのリソースを見つけましたが、それについて何ができるかまだわからないと思います。