在tcl中传递和调用多个参数

时间:2014-04-02 20:23:06

标签: batch-file arguments tcl

我想创建一个可以使用N个参数的tcl过程。我想从一个bat文件中调用它。 这是我写的程序:

proc multi_argu {args} {
foreach {path rev_start rev_end} $args {
        puts "path-> $path"
        puts "rev_start-> $rev_start"
        puts "rev_end-> $rev_end"
    }
}
multi_argu $argv

现在我从我的bat文件中将其称为

tclsh multi_argu.tcl 1 2 3

但是出局是

path-> 1 2 3
rev_start->
rev_end->

在我的tcl文件的末尾,我打电话给multi_argu $argv,我认为这是罪魁祸首。但是,我不知道如何为多个参数执行此步骤。任何人都可以提供任何意见吗?

2 个答案:

答案 0 :(得分:4)

由于$argv是一个列表,因此您将列表变量传递给proc,这意味着$args成为一个包含一个列表元素的列表。

在tcl 8.5中,您可以对调用proc的方式进行微小更改:

multi_argu {*}$argv

{*}将枚举列表中的项目,因此$args会成为项目列表。

否则,我想你可以使用类似的东西:

foreach {path rev_start rev_end} [lindex $args 0] { ... }

这种方式违背了使用args作为proc的参数的目的。在这种情况下,您也可以使用其他变量名称。

答案 1 :(得分:0)

你必须将multi_argu定义为proc吗?您的.bat文件只能调用multi_argu.tcl 包含:

puts "Calling $argv0 with $argc arguments: $argv..."

foreach {path rev_start rev_end} $argv {
        puts "path-> $path"
        puts "rev_start-> $rev_start"
        puts "rev_end-> $rev_end"
    }

现在,当您从bat文件中调用

tclsh multi_argu.tcl 1 2 3

输出结果为:

Calling multi_argu.tcl with 3 arguments: 1 2 3...
path-> 1
rev_start-> 2
rev_end-> 3