我正在调用这样的TCL程序 -
::f::abstract -procname my_proc -args "-arg1 $a -arg2 $b"
现在$a
本身就是这样 -
"ping -c 1 10.1.1.$ip"
当我尝试运行此功能时,$a
会展开,然后变为 -
-args "-arg1 ping -c 1 10.1.1.27 -arg2 a2"
这会产生错误,因为现在看来我们还有其他参数,例如-c。
我想要的是整体地接受$a
,然后在程序中扩展它。
我该怎么做?
我无法使用{}
括号,因为我需要变量替换。我无法删除引号,因为外引号会引入args
。
答案 0 :(得分:2)
怎么样
::f::abstract -procname my_proc -args [list -arg1 $a -arg2 $b]
它允许替换但保留命令行的列表结构。即你在每个级别上仍然拥有相同数量的参数。
答案 1 :(得分:2)
欢迎引用恐怖行为。
如果您在程序中正确展开它,请将其视为正确的列表:
::f::abstract -procname my_proc -args [list -arg1 $a -arg2 $b]
这会像你期望的那样传递给你的过程:作为四件事:
-arg1
ping - c1 10.1.1.$ip
-arg2
$b
扩展为> 在你的proc中,你将不得不再次eval
你的arg1的'a'值,就像你期望的那样(我希望你的结构中有多个评估)。
proc ... args {
array set options <defaults>
array set options $args
set a [uplevel 1 $options(-arg1)]
...
# $a now has a useful value...
}