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

Arrays 需要通过具有大量索引的tcl数组中的数组名提取值,arrays,regex,tcl,Arrays,Regex,Tcl,我有一个如下所示的数组: 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

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

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\u*\ u服务器的值
。我在array names命令中使用了glob样式匹配和regexp匹配

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


foreach srv [array names params "ddns_*_servers,*"]
打印$srv时,我得到:
'ddns\u a\u服务器,sfg'
而不仅仅是
'sfg'


我得到了索引和它的值。无法理解这是为什么。我以前用过几次,效果非常好。我在这里出错的地方

这是因为您使用的是[array名称]——您仍然需要从给定名称的数组中获取值

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