1

期待スクリプトがあり、要件に応じてコードの特定の部分を実行したい場合、以下のようなコードにいくつかの手順があるとします。

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

4

1 に答える 1

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
    }
}
于 2013-04-30T08:28:31.103 に答える