テスト:
[ -z "\$plug_event" ]
無意味です。文字列の長さがゼロになることはありません。実行されなかった後のリターン。
そのコードを書いた人は、自分が何をしているのか理解していませんでした...特別に扱われるヒアドキュメントの一部であるなどの酌量すべき状況がない限り。
しかし、それだけでは、その発言は無意味です。
...コードを見て...
# 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
誰かが何をしようとしているのか多かれ少なかれ知っていました。彼らはヒアドキュメントでスクリプトを書いており、生成されたスクリプトが作成されたときではなく、実行されたときにパラメータを展開する必要があります。以下を使用することで、生活を簡素化できた可能性があります。
# create iptables script on the fly
cat > /etc/ip_logging.sh << 'EOF'
終了マーカーの周りの引用符は、ヒアドキュメントで展開が行われないことを意味するため、すべてのバックスラッシュを使用できます。
bash
マニュアルはあなたの友達です。 シェル パラメーターの展開は関連するセクションの 1 つですが、抑制された展開ではなく、実際の展開について説明します。