gpt4 book ai didi

tcl - 如何使用连字符标志参数创建 tcl proc

转载 作者:行者123 更新时间:2023-12-04 14:21:43 26 4
gpt4 key购买 nike

我在整个互联网上搜索,我想我搜索的关键字不正确我尝试了其中的大部分:)

我想在 tcl/bash 中创建一个带有连字符标志的 proc,以从用户那里获取带有标志的参数

例如

proc_name -color red -somethingselse black

最佳答案

其实很容易做到。此代码允许缩写选项名称、标记选项(示例中的 -quxwoo)以及使用 -- 标记或非选项参数停止读取选项的能力出现。在示例中,未知选项名称会引发错误。通过选项解析循环后,args 包含剩余的命令行参数(不包括 -- 标记,如果使用的话)。

proc foo args {
array set options {-bargle {} -bazout vampires -quxwoo 0}
while {[llength $args]} {
switch -glob -- [lindex $args 0] {
-bar* {set args [lassign $args - options(-bargle)]}
-baz* {set args [lassign $args - options(-bazout)]}
-qux* {set options(-quxwoo) 1 ; set args [lrange $args 1 end]}
-- {set args [lrange $args 1 end] ; break}
-* {error "unknown option [lindex $args 0]"}
default break
}
}
puts "options: [array get options]"
puts "other args: $args"
}

foo -barg 94 -quxwoo -- abc def
# => options: -quxwoo 1 -bazout vampires -bargle 94
# => other args: abc def

这就是它的工作原理。首先为选项设置默认值:

array set options {-bargle {} -bazout vampires -quxwoo 0}

然后进入一个处理参数的循环,如果有的话(左)。

while {[llength $args]} {

在每次迭代期间,查看参数列表中的第一个元素:

switch -glob -- [lindex $args 0] {

字符串匹配(“glob”)匹配用于使缩写选项名称成为可能。

如果找到值选项,使用lassign 将值复制到options 数组的相应成员,并删除参数列表中的前两个元素。

-bar*   {set args [lassign $args - options(-bargle)]}

如果找到标志选项,则将 options 数组的相应成员设置为 1,并删除参数列表中的第一个元素。

-qux*   {set options(-quxwoo) 1 ; set args [lrange $args 1 end]}

如果找到特殊的 -- 标记,将其从参数列表中删除并退出选项处理循环。

--      {set args [lrange $args 1 end] ; break}

如果找到尚未处理的选项名称,则引发错误。

-*      {error "unknown option [lindex $args 0]"}

如果第一个参数与以上任何一个都不匹配,我们似乎已经用完了选项参数:退出循环。

default break

文档:array , break , error , lassign , lindex , llength , proc , puts , set , switch , while

关于tcl - 如何使用连字符标志参数创建 tcl proc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31110082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com