2016-08-12 2 views
0

Как сохранить аргументы командной строки в массиве в 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 
+0

С точки Tcl, ARGV список не является массивом, так что вы будете использовать Lindex для доступа к его элементам и llength к найти его размер. –

+0

Обратите внимание, что в tcl слово 'array' не означает массив на других языках. Вы уверены, что хотите массив, а не список? Даже если вы уверены, что хотите структуру данных пары «ключ-> значение», вы уверены, что хотите массив, а не dict? – 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)"