Expr 未解析 Bash 中的数学表达式

Expr 未解析 Bash 中的数学表达式

例如,我有如下的 bash 代码:

res=`expr $1+$2`
echo $res

或者

res=$(expr $1+$2)
echo $res

然后当我像这样执行我的代码时./script01.sh 3 4我得到:

3+4

奇怪的是,我的代码与许多其他教程完全相同,要么是我的电脑有问题,要么问题源于其他原因。

答案1

[~]$ a=1;b=2
[~]$ expr $a+$b
1+2
[~]$ expr $a + $b
3
[~]$ expr $a * $b
expr: syntax error
[~]$ expr $a \* $b
2

从手册页中:

ARG1 + ARG2
              arithmetic sum of ARG1 and ARG2

我们可以看到,参数和运算符之间需要一个空格。此外,还必须转义在 bash 中可能被解释为 glob 的运算符:

Beware that many operators need to be escaped  or  quoted  for  shells.

答案2

答案3

你的第二个版本应该是这样的:

#!/usr/bin/env bash

res=$(expr "$1" + "$2")

echo "$res"

你的第一个版本应该是:

#!/usr/bin/env bash

res=`expr "$1" + "$2"`

echo "$res"

注意运算符之间的空格+。最后使用更现代的语法:

#!/usr/bin/env bash

res=$(( $1 + $2 ))

echo "$res"

请注意,最后一个版本是首选方式。

相关内容