我是TCL脚本的新手。我有一个名为“ Sample.tcl”的脚本。在Sample.tcl中,我有一个名为URLSession
的变量。如果存在特定的argv,我该如何为变量赋值?
$name
仅当我指定Sample.tcl -step xyz
时,-step
应该是$name
。
答案 0 :(得分:0)
在这种情况下,我不确定$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
和{{1} }),因为我们实际上不需要为某件事做一个程序,所以只要做一次。
这不是安全的代码,无论如何都不是,但这是使某项工作有效且灵活的方式。
通常,解析命令行参数可能需要花费大量时间才能完全正确,并且有各种软件包可以提供帮助,但这仅在编写供其他人运行的代码时才非常重要。如果只适合自己,那么您可能会变得很草率,并在几分钟之内完成工作。
答案 1 :(得分:0)
使用tcllib中的cmdline
软件包,您可以编写:
#!/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"
}