我想构建一个复杂的变量,让我们看看:
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}
有同样的问题!
我该如何解决?
答案 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"