2016-08-12 72 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)"