首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tcl开放管道似乎错误地处理了参数中的空格

问tcl开放管道似乎错误地处理了参数中的空格
EN

Stack Overflow用户
提问于 2013-04-17 07:29:03
回答 1查看 341关注 0票数 0

我把这个打开了:

代码语言:javascript
复制
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 is echo "/file name"似乎传递的是:

\"file name\"。

当我在Linux上尝试时,我得到的结果是"file name" (没有反斜杠)。我尝试用"\ "替换文件名中的空格,但是目标得到了两个文件名,即空格被用来分隔文件名。

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

EN

回答 1

Stack Overflow用户

发布于 2013-04-17 13:04:59

啊,这看起来很复杂!要将这类内容传递到管道创建代码中,您需要使用正确的方法:

代码语言:javascript
复制
set r [catch {open |[list {*}$config(cmd,sh) $cmd 2>@1] r} fid]

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16048951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档