好的,所以我似乎无法弄清楚这到底是如何工作的。运行时附加的代码导致无效的命令名称“”,同时执行从“switch -regexp -- $line {”(以及文件的其余部分)中调用的“\t”(“#”arm line 1)
我遇到了这个问题,最后发现 # 正在这样做,我尝试使用 regsub 转义它(如下所示)。我可以解析字符串的唯一方法是如果我从字符串中一起删除 # (inputString 更改为删除 # 符号)。
基于 TCL 将所有行读取为文本(包括命令)的声明,我只能假设正在读取的字符串包含 # 并且无法完成该行,当然返回了错误。然而转义(尝试 1 \ 和 2 \'s)并没有做任何事情来使它更好它所做的只是将 \ 添加到我所有其他“非单词字符”(我有 - 工作正常,但现在有 \的...: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"
更新:我确实找到了这个资源,它(在一定程度上)解释了评论的混乱性质,但我想我仍然不确定我能做些什么:“为什么我不能在 Tcl 评论中放置不匹配的大括号”。