如果我有一个期望脚本,我想根据需要执行某些代码部分。如果我的代码中有一些程序,如下所示
proc ABLOCK { } {
}
proc BBLOCK { } {
}
proc CBLOCK { } {
}
然后在执行脚本时,如果我可以使用某些开关,如。
./script -A ABLOCK #executes only ABLOCK
./script -A ABLOCK -B BBLOCK #executes ABLOCK and BBLOCK
./script -V # just an option for say verbose output
其中ABLOCK,BBLOCK,CBLOCK可以是参数列表argv
答案 0 :(得分:2)
为什么不:
foreach arg $argv {
$arg
}
并将其作为./script ABLOCK BLOCK CBLOCK
有人也可以通过exit
,如果您不想要,请检查它是否有效:
foreach arg $argv {
if {$arg in {ABLOCK BLOCK CBLOCK}} {
$arg
} else {
# What else?
}
}
对于开关,您可以使用相同的(如果它们不需要参数):
proc -V {} {
set ::verbose 1
# Enable some other output
}
如果需要切换参数,可以执行以下操作:
set myargs $argv
while {[llength $myargs]} {
set myargs [lassign $myargs arg]
if {[string index $arg 0] eq {-}} {
# Option
if {[string index $arg 1] eq {-}} {
# Long options
switch -exact -- [string range $arg 2 end]
verbose {set ::verbose 1}
logfile {set myargs [lassign $myargs ::logfile]}
}
} else {
foreach opt [split [string range $arg 1 end] {}] {
switch -exact $opt {
V {set ::verbose 1}
l {set myargs [lassign $myargs ::logfile]}
}
}
}
} else {
$arg
}
}