UNIX从变量计算表达式

时间:2011-03-23 20:16:17

标签: shell unix

我有一个带有数学表达式的变量。我想在UNIX shell中对它进行评估,并将结果存储在另一个变量中。我该怎么做?

我尝试了以下但是它不起作用

var1="3+1"
var2=`expr "$var1"`
echo $var2

var2值应计算为4。

6 个答案:

答案 0 :(得分:4)

expr需要操作数和运算符之间的空格。此外,您需要反引用来捕获命令的输出。以下方法可行:

var1="3 + 1"
var2=`expr $var1`
echo $var2

如果您想评估任意表达式(超出expr支持的有限语法),您可以使用bc

var1="3+1"
var2=`echo $var1 | bc`
echo $var2

答案 1 :(得分:3)

你可以这样做

var2=$(($var1))

答案 2 :(得分:1)

尝试使用反引号:

var2=`expr $var1`

编辑:你需要在等式中包含空格才能使expr起作用。

答案 3 :(得分:1)

eval "var2=\$(( $var1 ))"

使用内置的shell算法避免了一些复杂性和expr有限的解析器。

答案 4 :(得分:0)

尝试使用以下语法:

var1="3+1"
var2=$((var1))
echo $var2

输出为:4

答案 5 :(得分:0)

如果这些是数学表达式:

var2=$( bc <<< "$var1" )

或者,对于较旧的贝壳

var2=$( printf "%s\n" "$var1" | bc )