Присвоение значения переменной только в том случае, если в TCL указано значение argv - PullRequest
0 голосов
/ 20 ноября 2018

Я новичок в написании сценариев TCL. У меня есть скрипт с именем "Sample.tcl".В Sample.tcl у меня есть переменная с именем $name.Как я могу присвоить значение переменной, если существует определенный argv т.е.

Sample.tcl -step xyz 

Только если я укажу -step, тогда $name должно быть xyz.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Используя пакет cmdline из tcllib, вы можете написать:

#!/usr/bin/env tclsh

package require cmdline

set options {
    {step.arg       ""      "Set the step value"}
}

try {
    array set params [cmdline::getoptions argv $options]
} on error e {
    puts stderr $e
    exit 1
}

if {$params(step) ne ""} {
    set name $params(step)
}

if {[info exists name]} {
    puts "name = $name"
} else {
    puts "name is not set"
}
0 голосов
/ 20 ноября 2018

Я не уверен, что $name может быть в этом контексте (это действительно необычное имя для переменной, и использование имен переменных обычно является плохой идеей), но я предполагаю, что выв этом случае вы пытаетесь установить step на xyz, вы можете поместить это в свой скрипт:

apply {{} {
    # For each pair of values in the arguments (after the script name)
    global argv
    foreach {key value} $argv {
        # Safety-check: if the key starts with a hyphen...
        if {[string match -* $key]} {
            # ... strip the leading hyphen(s)
            set varname [string trimleft $key "-"]
            # ... bind that global var name to a local name
            upvar 1 $varname var
            # ... and set the variable to the value we've got.
            set var $value
        }
    }
}}

Это сделано в apply, чтобы мы не загрязняли глобальное пространство именсо всеми нашими рабочими переменными (key, value, varname и var) и потому, что нам действительно не нужно создавать процедуру для чего-то, что мы собираемся делать только один раз.

Это не безопасный фрагмент кода, ни в коем случае, но это полезный и гибкий способ заставить что-то работать.


В общем, синтаксический анализ командной строкиАргументы могут занять совсем немного времени, чтобы понять все правильно, и есть различные пакеты, которые могут помочь, но это действительно важно, когда пишется код для запуска другими людьми.Когда это только для вас, вы можете быть очень небрежным и выполнить работу за несколько минут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...