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