需要通过具有大量索引的 tcl 数组中的数组名称提取值

Need to extract values through array names in tcl array which has lot of indices

我有一个如下所示的数组:

params(ddns_a_servers,sfg)     = sfg
params(ddns_a_zone)            = dsgfs
params(dhcp_option_encoding,1) = string
params(dhcp_option_id,1)       = 1
params(dhcp_option_value,1)    = fdsg
params(ddns_bsr_servers,dasf   = dasf
params(log)                    = 1
params(svc_dnsservers)         = 1.1.1.1
params(svc_domainname)         = rr

我需要提取索引 ddns_*_servers 的值。我使用 glob 样式匹配和正则表达式匹配与数组名称命令

foreach srv [array names params -regexp ddns_.+_servers,.+]


foreach srv [array names params "ddns_*_servers,*"]

打印出 $srv 我得到: 'ddns_a_servers,sfg' 而不仅仅是 'sfg'

我正在获取索引和值。无法理解这是为什么。我以前用过几次,效果很好。我哪里错了

那是因为您正在使用 [array names] -- 您仍然需要从给定名称的数组中获取值。

array set params {
    ddns_a_servers,sfg      sfg
    ddns_a_zone             dsgfs
    dhcp_option_encoding,1  string
    dhcp_option_id,1        1
    dhcp_option_value,1     fdsg
    ddns_bsr_servers,dasf   dasf
    log                     1
    svc_dnsservers          1.1.1.1
    svc_domainname          rr
}

foreach name [array names params "ddns_*_servers,*"] {
    puts [format "%s => %s" $name $params($name)]
}
ddns_bsr_servers,dasf => dasf
ddns_a_servers,sfg => sfg