TCL 的通用字符串引用

2024-01-18

我正在编写一个实用程序(恰好是在 python 中),它以 TCL 脚本的形式生成输出。给定 python 中的一些任意字符串变量(不是 unicode),我想生成一个 TCL 行,例如

set s something

...这将设置 TCL 变量's' 到那个确切的字符串,无论其中有什么奇怪的字符。在不变得太奇怪的情况下,我不想让输出变得比需要的更混乱。我相信一个不错的方法是

  1. 如果字符串不为空并且仅包含字母数字,以及一些字符,例如.-_(但绝对不是$"{}\)然后就可以按原样使用;

  2. 如果它只包含可打印字符并且没​​有双引号或大括号(并且不以反斜杠结尾),那么只需输入{}周围;

  3. 否则,将""使用后周围\逃避" { } \ $ [ ] , and \nnn非打印字符的转义。

问题:这是需要在双引号内转义的完整字符集吗?我在文档中找不到这个。我是否错过了什么(例如,我几乎错过了 (2) 的字符串不能以 \ 结尾)。

我知道还有很多其他字符串可以引用{},但似乎很难轻易识别它们。另外,如果您不介意非打印字符(特别是换行符)出现在 TCL 输出中,则 (2) 似乎是可以的。


你真的只需要 2 条规则,

  • 转义大括号
  • 将输出括在大括号中

您无需担心换行符、不可打印字符等。它们在文字字符串中有效,并且 TCL 具有出色的 Unicode 支持。

set s { 
this is
a 
long 
string. I have $10 [10,000 cents] only curly braces \{ need \} to be escaped.
\t is not  a real tab, but '    ' is. "quoting somthing" :
{matchin` curly braces are okay, list = string in tcl}
}

Edit根据您的评论,您可以执行以下操作:

  • escape [] {} and $
  • 将整个输出包装在set s [subst { $output } ]

Tcl 的优点在于它的语法非常简单。除上述3个字符外,没有其他字符需要转义。

Edit 2最后一次尝试。

如果你通过了subst有些选择,你只需要逃避\ and {}

set s [subst -nocommands -novariables { $output } ]

然而,您需要提出一个正则表达式来将不可打印字符转换为其转义代码。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCL 的通用字符串引用 的相关文章

随机推荐

  • pyenv 不会更改 mac 上的 python 版本

    我在 mac 上安装了 pyenv 并使用以下命令安装所需的 python 版本 pyenv install 3 8 0 pyenv global 3 8 0 我正在使用 zsh 我的 zshrc 文件包含以下内容 if command v
  • 在 C 中创建跨多个源文件注册函数的调度表

    如何用C实现动态调度表 https stackoverflow com questions 11840651 how can i implement a dynamic dispatch table in c 32192330 321923
  • 如何锁定导航抽屉?

    在我的应用程序中 我使用导航抽屉 它工作正常 但我想做的是 当互联网不可用时 用户不应该无法打开导航抽屉 任何人都可以帮助我如何解决这个问题 导航代码抽屉如下 public class MainActivity extends Activi
  • flutter doctor --android-licenses 由于 java.lang.UnsupportedClassVersionError 而无法工作

    我正在尝试接受 flutter doctor android licenses 但出现此错误 Error A JNI error has occurred please check your installation and try aga
  • 打包包含 C 共享库的 Python 库的最佳方式?

    我编写了一个库 其主要功能是用 C 实现的 速度至关重要 周围有一个薄薄的 Python 层来处理ctypes肮脏 我要来打包它 我想知道如何最好地解决这个问题 它必须与之交互的代码是共享库 我有一个 Makefile 它构建 C 代码并创
  • Postgresql:查询返回不正确的数据

    假设我有一张桌子empgroupinfo我想获取恰好包含这两个 groupId 的员工 ID500 and 501 将动态出现 仅 不应出现或多或少的组数 其中empid 102位于 500 groupid 中 我尝试过以下查询 selec
  • 使用numpy“模块”对象没有属性“数组”[重复]

    这个问题在这里已经有答案了 我只是想将列表转换为一维数组 如下所示 import numpy as np print np array 2 3 4 但我收到以下错误 Traceback most recent call last File
  • LANGUAGE sql 中函数的 RAISE EXCEPTION 语句的等效或替代方法?

    对于下面编写的函数 RAISE EXCEPTION 语句是否有等效的 或解决方法 LANGUAGE sql CREATE OR REPLACE FUNCTION fn interpolation p yearinteger integer
  • 从 bash 执行 php 脚本时出错

    你好 我正在尝试从 bash 脚本执行 php 文件 bin sh php func php and func php文件看起来像
  • 悬停效果不会在图像上触发

    我将鼠标悬停在 picutre div 中的 img 上时遇到问题 HTML div img class content pic src image exemple jpg alt exemple img class content pic
  • Apple 推送服务证书不受信任

    我最近在我的 M1 mac mini 上创建了 Apple Push Service 证书 在钥匙串中 它表示证书不受信任 我已经安装了开发者关系中级证书 如中所述here https developer apple com forums
  • Ajax字符串长度限制?

    ajax 的 url 中添加的参数长度是否有限制 我在 Ruby 上使用 Thin 服务器 并以以下格式从 Web 浏览器发出 ajax 请求 io new XMLHttpRequest io open GET http localhost
  • 使用UsageStatsManager获取前台应用程序

    我正在尝试使用UsageStatsManager 来获取带有Marshmallow 的Nexus 5 上的前台应用程序 我记得它曾经有效 但由于某种原因 我现在得到包 类名称的空字符串 这是我的实现 public String getFor
  • ffmpeg - 制作干净的 WAV 文件

    我希望使用以下命令将多个文件批量转换为音频文件ffmpeg对于一个名为Star Wars Jedi Knight Dark Forces II 我遇到的问题是ffmpeg似乎正在做一些事情Jedi Knight无法播放声音文件 Jedi K
  • .htaccess 路径只能通过 ip 访问

    我想使用 htaccess 配置阻止来自我的站点的路径 这个想法是只有一组特定的 IP 可以从 URL 访问该特定路径 Note 它是一个路径 而不是页面或目录 我们正在尝试屏蔽 Web 服务 以便仅对 URL 进行后调用 我想要网址exa
  • IntelliJ 抑制 API 方法的未使用警告

    我最近从 Eclipse 切换到 IntelliJ IDEA 我真的很喜欢检查器 发现它们用警告来标记潜在的错误 对我来说非常有用 我遇到了一个我无法解决的问题 我有一些Java项目在其他项目中用作API 因此它包含未使用的方法 这些方法被
  • 如何在nodejs中使用geoNear?

    我想使用地理空间geoNear mongodb中的数据库 Mongo查询 db runCommand geoNear tmp near type Point coordinates 77 00000 12 00000 spherical t
  • ELF可执行文件的起点?

    我用 anjuta 在 lubuntu 12 10 上编译以下 C 程序 int main return 0 文件名是 foobar 然后我打开终端并写入命令 ndisasm foobar b 32 1 gt asm txt 使用32位指令
  • Tranquility服务器不会向druid发送数据

    我在用着imply 2 2 3 这是我的宁静服务器配置 dataSources spec dataSchema dataSource tutorial tranquility server parser type string parseS
  • TCL 的通用字符串引用

    我正在编写一个实用程序 恰好是在 python 中 它以 TCL 脚本的形式生成输出 给定 python 中的一些任意字符串变量 不是 unicode 我想生成一个 TCL 行 例如 set s something 这将设置 TCL 变量