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

Tcl quoting proc to sanitise string to pass to other shells

我想将一个字典值传递给另一个shell(在我的应用程序中它传递了几个'shell'级别),并且字典包含字符(space,双引号等)导致问题。

我可以使用 ::base64::encode -wrapchar $dict 和相应的 ::base64::decode $str 之类的东西,它按预期工作,但结果当然几乎不可读。

但是,出于调试和演示的原因,我更喜欢一个 encoded/sanitised 字符串,该字符串尽可能合理地类似于原始字典值,并使用避免 spaces、引号等的字符集。 所以,我正在寻找类似 ::base64 映射过程但更轻的东西 触摸。

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

您可以使用 string mapregsub 来制作更轻松的引用方案来完成主要工作。

这是 string map 的示例:

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'

这是 regsub 的示例:

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>

您需要决定您真正想要使用哪种引用方式。对于我自己来说,如果我经历了几个 shell,我会想要完全避免引用(因为很难做到正确),而是想方设法以其他方式发送数据,可能是通过管道或在临时文件。在紧要关头,我会使用一个环境变量,因为 shell 往往不会像参数那样混乱。