我有一个带有数学表达式的变量。我想在UNIX shell中对它进行评估,并将结果存储在另一个变量中。我该怎么做?
我尝试了以下但是它不起作用
var1="3+1"
var2=`expr "$var1"`
echo $var2
var2值应计算为4。
答案 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
答案 5 :(得分:0)
如果这些是数学表达式:
var2=$( bc <<< "$var1" )
或者,对于较旧的贝壳
var2=$( printf "%s\n" "$var1" | bc )