如何解释TCL中字符串列表中的“”?

时间:2013-01-31 13:45:00

标签: tcl

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

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}

有同样的问题!

我该如何解决?

2 个答案:

答案 0 :(得分:6)

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

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

选择正确的语言版本,当然是。

答案 1 :(得分: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]

您需要了解插值,引号和括号,如下所示:Understanding the usage of braces

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

修改 如果你真的想要一个引用的参数,如"set var xxx"

,你可能实际上是这个意思
    set command_to_launch "extrernal_command_tool -option \"set var $entry_arg\" -other_option"