Tcl引用过程来清理字符串以传递给其他shell

Tcl引用过程来清理字符串以传递给其他shell,tcl,quoting,Tcl,Quoting,我想将dict值传递给我的应用程序中的另一个shell。它通过几个“shell”级别,并且dict包含引起问题的字符、空格、双引号等 我可以使用像::base64::encode-wrapchar$dict和相应的::base64::decode$str这样的东西,它可以像预期的那样工作,但是结果当然是非常不可读的 然而,出于调试和演示的原因,我更喜欢一个与原始dict值尽可能相似的编码/净化字符串,并使用一个避免空格、引号等的字符集。 因此,我正在寻找类似::base64映射过程的东西,但要使

我想将dict值传递给我的应用程序中的另一个shell。它通过几个“shell”级别,并且dict包含引起问题的字符、空格、双引号等

我可以使用像::base64::encode-wrapchar$dict和相应的::base64::decode$str这样的东西,它可以像预期的那样工作,但是结果当然是非常不可读的

然而,出于调试和演示的原因,我更喜欢一个与原始dict值尽可能相似的编码/净化字符串,并使用一个避免空格、引号等的字符集。 因此,我正在寻找类似::base64映射过程的东西,但要使用更轻的 触摸


如果您有任何建议,我们将不胜感激。

您可以使用string map或regsub制作更轻松的报价方案来完成主要工作

以下是字符串映射的示例:

下面是regsub的一个示例:


您需要决定您真正想要使用哪种引用。对于我自己来说,如果我要通过几个shell,我会希望完全避免引用,因为很难找到正确的方法,而是找到以其他方式发送数据的方法,可能是通过管道或临时文件。在紧要关头,我会使用一个环境变量,因为shell不会像参数一样处理这些问题。

谢谢!我会听从你的建议,使用反向通道。非常感谢!
set input "O'Donnell's Bait Shop"
set quoted '[string map {' {'\''}} $input]'                                                 ; #'# This comment just because of stupid Stack Overflow syntax highlighter
puts $quoted
# ==> 'O'\''Donnell'\''s Bait Shop'
set input "This uses a hypothetical quoting of some letters"
set quoted <[regsub -all {[pqr]} $input {«&»}]>
puts $quoted
# ==> <This uses a hy«p»othetical «q»uoting of some lette«r»s>