在TCL的cmdline或相关包中,能否指定可多次设置的命令行选项?
实现重复命令行参数的不同方式
Python Click 实现
在Python的Click库中,可通过nargs=-1声明支持重复输入的选项:
@click.option('--foo', nargs=-1)
用户使用时可多次指定该参数:
python3 -m mypkg --foo bar --foo biz
Bash 实现
在Bash中,可通过循环结合getopts收集重复参数到数组:
declare -a a_arr; while getopts 'a:' opt; do case $opt in a) a_arr+=($OPTARG);; esac done shift (($OPTIND - 1))
Tcl 中实现重复参数的方法
Tcl默认使用::cmdline::getoptions解析命令行:
array set params [::cmdline::getoptions argv $options $usage]
但该工具原生不支持类似nargs=-1的重复参数打包功能,不过可以通过手动遍历命令行参数实现:
# 初始化字典存储参数 set params [dict create] set idx 0 set argc [llength $argv] while {$idx < $argc} { set current_arg [lindex $argv $idx] switch -- $current_arg { "--foo" { # 确保后续有参数 if {$idx + 1 >= $argc} { error "Option --foo requires an argument" } incr idx set arg_val [lindex $argv $idx] # 将参数追加到列表中 if {[dict exists $params foo]} { dict lappend params foo $arg_val } else { dict set params foo [list $arg_val] } incr idx } "--bar" { # 处理单值选项示例 incr idx dict set params bar [lindex $argv $idx] incr idx } default { # 收集位置参数 set positional_args [lrange $argv $idx end] break } } } # 若需要转为数组使用 array set params_array $params
这种方式通过手动遍历参数列表,遇到目标选项时将对应参数追加到列表中,从而支持多次指定同一选项。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

