存在 tcl procedure ,它执行 tcl 列表中存储的命令。 例如:
catch { exec $list}
列表看起来像:
--option1 op1 --option2 op2 --option3 op3 ...
“选项”之一是正则表达式,如下所示:
(.*[/\])?(sh|bash)(\.exe)?
通过 exec 选项替换后如下所示:
{(.*[/\])?(sh|bash)(\.exe)?}
但我需要的是:
"(.*[/\])?(sh|bash)(\.exe)?"
遇到这种情况我该怎么办?
最佳答案
当列表转换为字符串时,它会转换为规范形式,然后再转换回相同的列表。
您所看到的是用于确保规范形式正确转换回来的引号字符。
所以该值是正确的。
exec $list
仅将单个参数传递给 exec
。 exec
采用一系列单词作为参数,而不是包含单词的列表。
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/