考虑这段代码:
#!/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。