问题描述
考虑这段代码:
#!/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 ]
缺少操作数之一。
座右铭:除非您需要该值进行分词或遍历,否则始终引用变量。