Linux Shell脚本:在变量周围加引号\$

Linux Shell脚本:在变量周围加引号\$,linux,shell,Linux,Shell,我刚刚开始学习shell脚本,并一直在尝试了解该脚本中的内容: 具体地说,我不能把我的头绕在使用“\$foo”的几行上,例如: [-z“\$plug\u事件”]&返回 我所阅读和了解的所有关于shell脚本的内容都让我相信“\$plug\u event”将作为一个字符串计算,其值为$plug\u event。这意味着上述测试将始终返回1(即测试为假),对吗?如果是,那有什么意义 我已经找到了很多关于变量的引号,但到目前为止,我还没有找到一个这种用法的例子。只是打字错误吗?不幸的是,我还远远没有足

我刚刚开始学习shell脚本,并一直在尝试了解该脚本中的内容:

具体地说,我不能把我的头绕在使用
“\$foo”
的几行上,例如:

[-z“\$plug\u事件”]&返回

我所阅读和了解的所有关于shell脚本的内容都让我相信
“\$plug\u event”
将作为一个字符串计算,其值为
$plug\u event
。这意味着上述测试将始终返回
1
(即测试为假),对吗?如果是,那有什么意义

我已经找到了很多关于变量的引号,但到目前为止,我还没有找到一个这种用法的例子。只是打字错误吗?不幸的是,我还远远没有足够的经验来区分两者之间的区别

非常感谢所有帮助,只要有相关文件的链接就足够了

干杯, 凯尔

测试:

[ -z "\$plug_event" ]
这是毫无意义的。字符串长度永远不为零;之后的返回永远不会执行

不管是谁写的代码都不明白他们在做什么。。。除非有可减轻处罚的情况,例如,它是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
#动态创建iptables脚本

cat>/etc/ip_logging.sh转义所有
$
的原因是这些行是


命令
cat>/etc/ip\u logging.sh/etc/ip\u logging.sh是关于“\”的具体问题?如果是这样的话,看起来他只是在逃避变量,这样它就不会被shell解释了。这正是我所想的。如果是这样的话,测试的意义是什么?我认为这是一个毫无意义的测试,除非变量在另一个shell中展开。好的,我想我明白你的意思了。只有在这种情况下才使用反斜杠,因为他们使用
cat
来写入文件?@KyleG。正确,编辑了我的答案以避免使用反斜杠哇,我已经为此绞尽脑汁将近一个小时了。谢谢你澄清这一点!
# create iptables script on the fly
cat > /etc/ip_logging.sh << 'EOF'
cat > /etc/ip_logging.sh << 'EOF'
    [ -z "$plug_event" ]
    #other stuff
EOF