Tcl:容忍命令执行中的换行符
Tcl: tolerate line break in command execution
这个tcl问题有点特殊。我有大括号中的文本,其中包含方括号中的命令执行:
proc doit {txt} {
return $txt
}
set txt {
hallo [doit world]
}
puts [subst -novariables -nobackslashes $txt]
输出是hallo world
,这就是我想要的。
但是,有时我的编辑器会格式化文本,以便将命令执行分成多行:
set txt {
hallo [doit
world]
}
这会导致错误消息 wrong # args: should be "doit txt"
。
有什么优雅的方法可以避免这个问题吗?引入反斜杠扩展行不起作用,因为我的编辑器可能会在重新格式化文本后将其放在错误的位置。我想保持换行符不变(否则我可以在使用 subst
之前从 txt 中删除所有换行符)。解析文本并从命令执行中删除换行符似乎有点复杂。
感谢您的帮助!
一个技巧是用花括号将脚本文本包装成 subst
并让 Tcl 解析器在使用 {*}
扩展运算符进行命令替换之前将其解包:
set txt {
hallo [{*}{doit
world}]
}
这对重新格式化很有效。但是,我宁愿教你的编辑做事温和。
这个tcl问题有点特殊。我有大括号中的文本,其中包含方括号中的命令执行:
proc doit {txt} {
return $txt
}
set txt {
hallo [doit world]
}
puts [subst -novariables -nobackslashes $txt]
输出是hallo world
,这就是我想要的。
但是,有时我的编辑器会格式化文本,以便将命令执行分成多行:
set txt {
hallo [doit
world]
}
这会导致错误消息 wrong # args: should be "doit txt"
。
有什么优雅的方法可以避免这个问题吗?引入反斜杠扩展行不起作用,因为我的编辑器可能会在重新格式化文本后将其放在错误的位置。我想保持换行符不变(否则我可以在使用 subst
之前从 txt 中删除所有换行符)。解析文本并从命令执行中删除换行符似乎有点复杂。
感谢您的帮助!
一个技巧是用花括号将脚本文本包装成 subst
并让 Tcl 解析器在使用 {*}
扩展运算符进行命令替换之前将其解包:
set txt {
hallo [{*}{doit
world}]
}
这对重新格式化很有效。但是,我宁愿教你的编辑做事温和。