我在 tcl 脚本中生成了一些变量,它们实际上用作 perl 脚本的开关。
我的开关是-X
、-Y
和-Z
,我将它们存储在变量cmd
中> 与
设置cmd“-X -Y -Z”
我使用 exec 在 tcl 中运行 perl 脚本,如下所示:
exec ./script.pl $cmd
抛出错误:“错误:未知选项 x -y -z”
然后我尝试了另一种方法:
exec ./script.pl -- $cmd
对于这种特殊情况,perl 脚本会被执行,但没有开关,即开关不会被激活。
有什么办法可以解决这个问题吗?
最佳答案
set cmd "-X -Y -Z"
创建一个包含 -X -Y -Z
的单个字符串。当您使用 exec ./script.pl $cmd
调用 exec
命令时,您将使用 -X -Y -Z
传递单个参数。你想要的是三个独立的参数。最好的方法是:
exec ./script.pl {*}$cmd
{*}
运算符将列表扩展为其组成词。
这非常有用。您可以使用类似于(示例)的代码构建参数列表:
set cmd {}
lappend cmd -X
if { $mytest eq "true" } {
lappend cmd -Y
}
lappend cmd -Z
if { $filename ne {} } {
lappend cmd -f
lappend cmd $filename
}
exec ./script.pl {*}$cmd
对于旧版本的 Tcl,必须使用 eval
命令:
eval exec ./script.pl $cmd
编辑:--exec 的参数
exec
的 --
参数指定 exec
将不再解析任何开关(选项)。这允许在命令以 -
开头的情况下使用 exec
。例如
exec -- -myweirdcommand
引用文献:Tcl Syntax (#5) ; eval ; exec
关于perl - 如何为使用 exec 从 tcl 运行的 perl 脚本传递开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45178099/