曲径通幽论坛

标题: uci 中多个 section 的标示顺序 [打印本页]

作者: beyes    时间: 2015-5-1 16:25
标题: uci 中多个 section 的标示顺序
许多情况下,会有许多个相同的配置类型,比如用 uci show 命令可以看到列出结如下:
# uci show firewall
firewall.@defaults[0]=defaults
firewall.@defaults[0].syn_flood=1
firewall.@defaults[0].input=ACCEPT
firewall.@defaults[0].output=ACCEPT
firewall.@defaults[0].forward=REJECT
firewall.@zone[0]=zone
firewall.@zone[0].name=lan
firewall.@zone[0].network=lan
firewall.@zone[0].input=ACCEPT
firewall.@zone[0].output=ACCEPT
firewall.@zone[0].forward=ACCEPT
firewall.@zone[0].masq=1
firewall.@zone[1]=zone
firewall.@zone[1].name=wan
firewall.@zone[1].network=wan wan6
firewall.@zone[1].output=ACCEPT
firewall.@zone[1].masq=1
firewall.@zone[1].mtu_fix=1
firewall.@zone[1].input=ACCEPT
firewall.@zone[1].forward=ACCEPT

在输出结果中,对于 zone,出现了数组的下标形式:[0], [1] 。打开 /etc/config/firewall 来看,会发现:
config zone
        option name 'lan'
        list network 'lan'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        option masq '1'

config zone
        option name 'wan'
        list network 'wan'
        list network 'wan6'
        option output 'ACCEPT'
        option masq '1'
        option mtu_fix '1'
        option input 'ACCEPT'
        option forward 'ACCEPT'

配置了两个 zone 的节。因此,[0] 表示第一个 zone,[1] 表示第二个 zone 。这里还有一点需要提及,这个下标是可以使用负数的,比如总共有 3 个下标([0], [1], [2]),那么 [-1] 和 [2] 是等价的。观察下面的一个配置文件:
# cat /etc/config/foo
config bar 'first'
        option name 'Mr. First'
config bar
        option name 'Mr. Second'
config bar 'third'
        option name 'Mr. Third'

观察命令的输出:
root@OpenWrt:/tmp# uci get foo.@bar[0].name
Mr. First
root@OpenWrt:/tmp# uci get foo.@bar[-0].name
Mr. First
root@OpenWrt:/tmp# uci get foo.@bar[-3].name
Mr. First

root@OpenWrt:/tmp# uci get foo.@bar[1].name
Mr. Second
root@OpenWrt:/tmp# uci get foo.@bar[-2].name
Mr. Second


root@OpenWrt:/tmp# uci get foo.@bar[2].name
Mr. Third
root@OpenWrt:/tmp# uci get foo.@bar[-1].name
Mr. Third







欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2