0

我正在调用这样的 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.

4

2 回答 2

2

怎么样

::f::abstract -procname my_proc -args [list -arg1 $a -arg2 $b]

它允许替换但保留命令行的列表结构。即你在每个级别上仍然有相同数量的参数。

于 2017-10-05T04:32:50.650 回答
2

欢迎引用恐怖片。

如果您在过程中正确展开它,请将其视为正确的列表:

::f::abstract -procname my_proc -args [list -arg1 $a -arg2 $b]

这会完全按照您的预期传递给您的 proc:作为四件事:

  • 字符串-arg1
  • 列表/脚本ping - c1 10.1.1.$ip
  • 字符串-arg2
  • 字符串 <whatever $bexpands to>

在您的 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...
}
于 2017-10-05T04:35:48.083 回答