如何在数组中存储命令行参数

时间:2016-08-12 08:29:55

标签: tcl expect

如何在tcl?

中的数组中存储命令行参数

我试图将命令行参数(argv)存储在数组中。 argv不是数组吗?我尝试了以下代码,但对我不起作用。

proc auto args {
    global argv
    set ifname [lindex $argv 0]
    puts "***********$ifname"
    puts "$argv(2)"
    for { set index 1} { $index < [array size argv ] } { incr index } {
       puts "argv($index) : $argv($index)"
    }
}
#Calling Script with arguments
auto {*}$argv

1 个答案:

答案 0 :(得分:3)

Tcl的argv全局是一个列表,而不是数组,因为顺序事项和列表是完全合理的参数方式。这就是你使用lindex(以及其他列表操作)的原因。您可以转换为数组,但大多数代码最终都会因此而“惊讶”。因此,最好为其使用不同的数组名称(下面的“arguments”):

proc argumentsToArray {} {
    global argv arguments
    set idx 0
    unset -nocomplain arguments; # Just in case there was a defined variable before
    array set arguments {};      # Just in case there are no arguments at all
    foreach arg $argv {
        set arguments($idx) $arg
        incr idx
    }
}

argumentsToArray
puts "First argument was $argument(0) and second was $argument(1)"