微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在Shell脚本中定义此变量需要双引号?

如何解决为什么在Shell脚本中定义此变量需要双引号?

考虑这段代码

#!/bin/bash +x
echo -n "String: "
read s
n=`expr index $s " "`
if [ $n -gt 0 ]; then
        m=`expr $n - 1`
        echo "Nome: " `expr substr $s 1 $m`
fi

当我使用和运行它并在提示符下写“ John Smith”时,出现此错误

./ script.sh:第5行:[:-gt:需要一元运算符

我可以通过在 n 的定义中使用 $ s 以及在echo命令中使用双引号来解决此问题,例如:

#!/bin/bash +x
    echo -n "String: "
    read s
    n=`expr index "$s" " "`
    if [ $n -gt 0 ]; then
            m=`expr $n - 1`
            echo "Nome: " `expr substr "$s" 1 $m`
    fi

这个最下面的一个很好用。但为什么? “”有什么区别?

解决方法

没有双引号,您的expr命令为:

expr index John Smith " "

这将报告语法错误,因为index运算符应仅跟随两个参数,但是您给了它三个参数。由于收到错误,因此不会输出结果,因此$n被设置为空字符串。然后if命令变为

if [ -gt 0 ]

缺少操作数之一。

座右铭:除非您需要该值进行分词或遍历,否则始终引用变量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。