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

时间:2016-02-23 21:00:58

标签: 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)                    = 1
params(svc_dnsservers)         = 1.1.1.1
params(svc_domainname)         = rr

我需要提取索引ddns_*_servers的值。我使用了glob样式匹配和regexp匹配数组名称命令

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


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

在打印出$ srv后,我得到: 'ddns_a_servers,sfg'而非'sfg'

我正在获取索引和值。无法理解为什么会这样。我以前曾经使用过这几次,它完美地运作了。我在哪里错了

1 个答案:

答案 0 :(得分:2)

那是因为您正在使用[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