tcl - Tcl:容忍命令执行中的换行符
问题描述
这个 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"
。
有没有一种优雅的方法来避免这个问题?引入反斜杠行扩展不起作用,因为我的编辑器可能会在重新格式化文本后将其置于错误的位置。而且我想保持换行符不变(否则我可以在使用之前从 txt 中删除所有换行符subst
)。解析文本并从命令执行中删除换行符似乎有点复杂。
谢谢你的帮助!
解决方案
一个技巧是subst
用花括号包裹你的脚本文本,并让 Tcl 解析器在使用{*}
扩展运算符替换命令之前解开它:
set txt {
hallo [{*}{doit
world}]
}
这将对重新格式化非常有效。但是,我宁愿教你的编辑要表现得温和。
推荐阅读
- verilog - 如何在verilog中实现“posedge异步复位逻辑”?
- html - 更改 Bootstrap 4 下拉按钮颜色
- visual-studio-code - VS Code 任务在调试执行时切换状态栏
- c# - 自定义属性未在断点触发
- c# - 为什么 ContentPresenter 的渲染时间大于其子项的总和?
- android - 快速片段切换视图绑定 null
- c - 什么是可执行目标文件中的 .rela.plt 部分?
- javascript - 我无法在反应中使用 %PUBLIC_URL% 加载我的文件
- python - Int 和 str 更改每个带有错误的字母 + 编辑:零索引每个单词
- node.js - 分享loopback4的dist文件夹