我的 expr 正在打印但未评估

我的 expr 正在打印但未评估

该脚本的代码是:

echo "Years:"
read age
x=`expr $age*365`
echo -e $x

当我从命令行调用此脚本时的输出如下:

Years: 

(假设我放了20)

20*365

为什么不评价呢?

答案1

expr已经过时了,而且现在基本上已经过时了。与更好的替代方案相比,它的使用也非常有限和笨拙,例如:

  1. bash 有仅整数如今内置算术。

    $ age=20
    $ echo "$((age * 365))"
    7300
    
    $ x=$((age*365))
    $ echo "$x"
    7300
    
  2. 用于bc浮点运算:

    $ age=20
    $ echo "$age * 365.25" | bc
    7305.00
    

    或者,如果您想删除小数部分:

    $ echo "scale=0; $age * 365.25/1" | bc
    7305
    

    需要除以 1,因为加法、减法和乘法忽略scale中的设置bc。这是一个长期存在的烦恼,不太可能被“修复”。

  3. 如果你更喜欢 RPN,你可以使用dc

    $ age=20
    $ dc -e "$age 365.25 * p" 
    7305.00
    

注意:反引号已过时且已弃用。使用$(...)反引号代替。例如

x=$(echo "$age * 365.25" | bc)

x=$(dc -e "$age 365.25 * p")

答案2

我们应该转义特殊字符*并在值和运算符之间保留空格。

尝试作为,

x=`expr $age \* 365`

相关内容