0

我想构造一个复杂的变量,让我们看看:

set entry_arg [lindex $argv 1]
set command_to_launch {extrernal_command_tool -option "set var $entry_arg" -other_option}
exec $command_to_lauch

命令启动,没问题...

但是,问题是工具获取 $entry_arg 并崩溃......这是由于不允许 tcl 解释 de 变量的“”

set command_to_launch {extrernal_command_tool -option "set var [lindex $argv 1]"  -other_option}

有同样的问题!

我该如何解决?

4

2 回答 2

6

command_to_launch您应该使用list命令构造 的内容。

set command_to_launch [list \
    extrernal_command_tool -option "set var [lindex $argv 1]" -other_option]

您可以使用以下任何一种来运行它:

exec {*}$command_to_launch           ; # For 8.5 or 8.6
eval exec $command_to_launch         ; # For 8.4 or before

当然,为您使用的语言版本选择正确的版本。

于 2013-01-31T13:58:47.967 回答
1

问题不是"",是{}。尝试:

set entry_arg [lindex $argv 0]
set command_to_launch "extrernal_command_tool -option $entry_arg -other_option"
set output [eval exec $command_to_lauch]

您需要了解插值、引用和大括号,如下所示:了解大括号的用法

(另外,我怀疑你想使用[lindex $argv 0]——TCL 使用变量argv0作为程序名称,并且参数从索引 0 开始,这与 C 和其他语言不同。)

编辑: 如果你真的想要一个引用的参数,你可能实际上是这个意思"set var xxx"

    set command_to_launch "extrernal_command_tool -option \"set var $entry_arg\" -other_option"
于 2013-01-31T14:06:41.027 回答