为什么在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

当我用并写";约翰·史密斯;在提示中,我得到这个错误:

/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 ]

其缺少一个操作数。

格言:总是引用变量,除非你需要值进行分词或globbing。

相关内容

  • 没有找到相关文章