expr显示表达式而不是解决它

时间:2015-11-08 06:44:35

标签: bash shell unix

这是我的shell脚本,

#! /bin/sh
# basic calculator
echo "Please input your choice"
printf " 1.Addition \n 2.SUbstraction \n 3.Multiplication \n 4.Division\n"
read choice
case "$choice" in
    1) echo "Enter number 1:";read n1;echo "Enter number 2:";read n2;t=$(expr "$n1"+"$n2");echo "$n1+$n2=$t";;
    2) echo "Enter number 1:";read n1;echo "Enter number 2:";read n2;t='expr $n1-$n2';echo "$n1-$n2=$t";;       
    3) echo "Enter number 1:";read n1;echo "Enter number 2:";read n2;t='expr $n1\*$n2';echo "$n1*$n2=$t";;
    4) echo "Enter number 1:";read n1;echo "Enter number 2:";read n2;t='expr $n1/$n2';echo "$n1/$n2=$t";;
esac

这是我的输出,

Script started on Sunday 08 November 2015 12:05:21 PM IST
Please input your choice
 1.Addition 
 2.SUbstraction 
 3.Multiplication 
 4.Division
1
Enter number 1:
5
Enter number 2:
6
5+6=5+6

问题是我的expr实际上并没有解决表达式

3 个答案:

答案 0 :(得分:3)

空白很重要:

$ expr 5+6
5+6
$ expr 5 + 6       
11 

要做算术,你需要给expr 3个不同的参数。

答案 1 :(得分:2)

expr的某些版本中,建议使用shell算法:

$ echo $((5+6))
11
$ echo $((5>=6))
0

如果需要,不需要使用空格分隔整数的shell算法。

  

expr实用程序在参数之间没有词法区别   可以        是操作符和可能是操作数的参数。一个操作数        在词法上与运算符相同将被视为语法错误。

 The syntax of the expr command in general is historic and inconvenient.
 New applications are advised to use shell arithmetic rather than expr

答案 2 :(得分:1)

对于'的其他调用,您使用单引号(expr)而不是反引号(`)。但正如我将指出的那样,几乎没有任何理由使用expr来执行算术。