考试:
[ -z "\$plug_event" ]
是没有意义的。字符串永远不会是零长度;之后的 return 永远不会执行。
编写该代码的人不明白他们在做什么……除非有情有可原的情况,例如它是 here-doc 的一部分,然后被特殊处理。
但是,就其本身而言,这种说法毫无意义。
...看代码...
# create iptables script on the fly
cat > /etc/ip_logging.sh << EOF
#!/bin/sh
. /etc/functions.sh
install_rule() {
config_get plug_event "\$1" plug_event
[ -z "\$plug_event" ] && return
pub_ip=\$(uci get dhcp.pub.ipaddr)
pub_mask=\$(uci get dhcp.pub.netmask)
priv_ip=\$(uci get dhcp.priv.ipaddr)
priv_mask=\$(uci get dhcp.priv.netmask)
iptables -I POSTROUTING -t nat -o br-\$1 -s \$pub_ip/\$pub_mask -j LOG --log-level debug --log-prefix "iplog: "
iptables -I POSTROUTING -t nat -o br-\$1 -s \$priv_ip/\$priv_mask -j LOG --log-level debug --log-prefix "iplog: "
}
config_load network
config_foreach install_rule interface
EOF
有人确实或多或少知道他们在做什么;他们在 here-doc 中编写脚本,并且需要在执行正在生成的脚本时扩展参数,而不是在创建脚本时。他们可以通过使用以下方法来简化生活:
# create iptables script on the fly
cat > /etc/ip_logging.sh << 'EOF'
结束标记周围的引号表示此处文档中未进行任何扩展,因此所有反斜杠都可以删除。
bash
手册是你的朋友。 Shell 参数扩展是一个相关部分,但它涵盖了实际扩展,而不是抑制扩展。