我在我的tcl脚本中生成了一些变量,这些变量实际上用作perl脚本的开关。
我的开关是-X
,-Y
和-Z
,我将它们存储在变量cmd
中
set cmd "-X -Y -Z"
我使用exec在tcl中运行perl脚本,如下所示:
exec ./script.pl $cmd
会抛出错误:"Error: Unknown option x -y -z"
exec ./script.pl -- $cmd
对于这种特殊情况,perl脚本会被执行但没有开关,即交换机不会被激活。
有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
set cmd "-X -Y -Z"
在其中创建一个包含-X -Y -Z
的字符串。当您使用exec
调用exec ./script.pl $cmd
命令时,您将使用-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的参数
--
的{{1}}参数指定exec
不再解析任何开关(选项)。这允许exec
用于命令以exec
开头的情况。例如
-
参考文献:Tcl Syntax (#5); eval; exec