-1

考虑这段代码:

#!/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

这个底部的工作得很好。但为什么?“”有什么区别?

4

1 回答 1

1

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

expr index John Smith " "

这会报告一个语法错误,因为index运算符后面应该只有两个参数,但你给了它三个参数。由于它得到一个错误,它不输出结果,所以$n设置为一个空字符串。然后if命令变成

if [ -gt 0 ]

缺少一个操作数。

座右铭:始终引用变量,除非您需要对值进行分词或通配。

于 2020-10-19T14:07:20.317 回答