将存储为字符串的数学表达式评估为单个数字(bash)

时间:2013-06-06 22:05:03

标签: macos bash shell

我正在使用Mac OSX并使用bash作为我的shell。我目前有一个字符串,我希望将其作为数字进行评估。当我回复字符串时,我得到1.e8*1.07**100。是否有任何方法可以传递此字符串以作为数字进行评估?

为什么它是一个字符串开头的背景是因为表达式是逐步构建的。第一个1.e8*1.07**%%d在代码中,然后用户输入一个整数作为1.07将被提升到的幂。所以在上面的例子中,用户将输入100,因此脚本卡住了1.e8*1.07**100,这是我希望的正确表达式,但我希望在回显变量时进行评估在哪里存放。

代码的实际重要部分:

BASE=$(printf '1.e8*1.07**%%d')
#Get user input assigned to pow
NUM=$(printf ${BASE} ${pow})
echo $NUM       #1.e8*1.07**100

感谢您提供的任何帮助。

[编辑:我也想不仅回应答案,而是将其存储为变量。]

3 个答案:

答案 0 :(得分:2)

怎么样:

python -c "print $NUM"

顺便说一句,你可以写

BASE="1.e8*1.07**%d"

(事实上,你甚至不需要引号。)

答案 1 :(得分:2)

在大多数unix *系统中,您会找到一个名为bc的工具,可以执行计算。您可能需要重写输入,我认为它接受^而不是**,并且我不确定1.e8符号。

答案 2 :(得分:2)

碰巧perl可以评估那个确切的表达式

$ x="1.e8*1.07**100"
$ y=$(perl -E "say $x")
$ echo $y
86771632556.6417