2016-08-12 40 views
0

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

我试图在数组中存储命令行参数(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 
+0

在Tcl中的术语,argv的是列表不是一个数组,因此会使用LINDEX来访问它的元素和llength到找到它的大小。 –

+0

请注意,在tcl中,“数组”这个词不代表其他语言的数组。你确定你想要一个数组而不是一个列表吗?即使你确定你需要一个key-> value对数据结构,你确定你想要一个数组而不是一个字典吗? – slebetman

回答

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)"