TCL exec 在列表中包含特殊字符

标签 tcl exec special-characters

存在 tcl procedure ,它执行 tcl 列表中存储的命令。 例如:

catch { exec $list}

列表看起来像:

--option1 op1 --option2 op2 --option3 op3 ...

“选项”之一是正则表达式,如下所示:

(.*[/\])?(sh|bash)(\.exe)?

通过 exec  选项替换后如下所示:

{(.*[/\])?(sh|bash)(\.exe)?}

但我需要的是:

"(.*[/\])?(sh|bash)(\.exe)?"

遇到这种情况我该怎么办?

最佳答案

当列表转换为字符串时,它会转换为规范形式,然后再转换回相同的列表。

您所看到的是用于确保规范形式正确转换回来的引号字符。

所以该值是正确的。

exec $list 仅将单个参数传递给 execexec 采用一系列单词作为参数,而不是包含单词的列表。

exec 命令应该是:

catch { exec {*}$list }

{*} 语法将列表转换为其组成词。

在旧版本的 tcl 中,必须使用 eval 语句:

catch { eval exec $list }

引用文献:exec , eval , {*} (section 5 of Tcl)

关于TCL exec 在列表中包含特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455292/

相关文章:

dll - 如何在Tcl中加载dll?

java - 如何用Java Hook 到系统级expect?

java - 使用 echo 命令将八进制字符串写为 ASCII 字符

excel - 在 excel 中识别特定 ASCII 范围之外的特殊字符并不总是有效

c# - 显示/插入特殊字符的问题,MySql ASP.NET

ruby - 如何进行忽略控制字符的文本搜索?

tcl - 在 tcl 过程中设置 2 个默认变量

tcl - 如何通过 TCL 访问 ModelSim 中的 VHDL 信号属性?

php - 无法在命令行上运行 PHP exec()

bash - 找到一个目录并在其中启动可执行文件