我有这个开放:

set r [catch {open "|[concat $config(cmd,sh) [list $cmd 2>@1]]" r} fid]

其中$config(cmd,sh)cmd /c ,我试图在$ cmd中传递文件名(可能还包含诸如echo之类的命令)。 如果文件名中没有空格,即:
cmd是echo /filename
一切都很好。 带空格,即:
cmd是echo "/file name" ,似乎传递的是:
\\"file name\\"
当我在Linux上尝试此操作时,会得到"file name" (没有反斜杠)。 我曾尝试用"\\ "替换文件名中的空格,但随后目标获得两个文件名,即该空格用于分解文件名。

我开始认为我已经在Tcl的Windows端口中发现了一个bug。

===============>>#1 票数:3

gh,那看起来令人费解! 要将这种事情传递到管道创建代码中,您需要使用正确的配方:

set r [catch {open |[list {*}$config(cmd,sh) $cmd 2>@1] r} fid]

也就是说,在构建管道时,请始终使用带有|[list ...]的表格,因为文档中说的就是管道打开器要查找的内容。 (这是Tcl中唯一的命令。)当然,在这种情况下,使用(8.5+) {*}语法也要简单得多,因为这样做显然是对的。

  ask by Tom Turkey translate from so

未解决问题?本站智能推荐:

关注微信公众号