有适用于 Ubuntu 的命令行计算器吗?

有适用于 Ubuntu 的命令行计算器吗?

我正在寻找一个可以在终端本身进行计算的计算器,无需任何其他额外的前缀和后缀。

例如:如果我在终端中输入 10000-9000 之类的内容,答案应该是 1000。

我再说一遍,我只需要一个终端中的快速计算器,不需要添加任何字符。我知道如果我切换到 Python,它可以做到这一点,但我不希望以这种方式实现。

答案1

您可以使用calc。默认情况下未安装,但您可以使用以下命令快速安装:

sudo apt-get install apcalc

安装后,您可以进行任何您想要的计算:

$ calc 5+2
    7
$ calc 5-2
    3
$ calc 5*2          
    10
$ calc 5/2
    2.5
$ calc 5^2
    25
$ calc 'sqrt(2)' 
    1.4142135623730950488
$ calc 'sin(2)'
    0.9092974268256816954
$ calc 'cos(2)'
    -0.416146836547142387
$ calc 'log(2)'
    ~0.30102999566398119521
$ calc 'sqrt(sin(cos(log(2))))^2'
    ~0.81633199125847958126
$ # and so on...

欲了解更多信息,请查看其手册页

答案2

您可以使用以下语法在 bash 中执行简单的整数运算((...)),例如

$ echo $((10000-9000))
1000

还有bc计算器,它可以接受标准输入上的算术表达式

$ echo "10000-9000" | bc
1000

bc程序也可以进行浮点运算

$ echo "scale = 3; 0.1-0.09" | bc
.01

答案3

Bash 算术

另一个可能的解决方案是添加一个简单的 Bash 函数内置算法将其放入你的.bashrc文件中以尝试一下:

=() {
    echo "$(($@))"
}

所以现在,您甚至不再需要了$((...))=这似乎很自然。

替代品

如果你想要更快的话,还有一件事:你可以用p+x替换它*。这将起作用:

=() {
    local IFS=' '
    local calc="${*//p/+}"
    calc="${calc//x/*}"
    echo "$(($calc))"
}

= 5 x 5  # Returns 25
= 50p25  # Returns 75

现在你甚至不需要Shift任何别的东西了,唯一需要的就是算术。

十六进制输出

如果需要,输出可以以十进制和十六进制显示。(笔记:使用x替换将与0x...十六进制语法冲突)

=() {
    local answer="$(($@))"
    printf '%d (%#x)\n' "$answer" "$answer"
}

例子:

$ = 16 + 0x10
272 (0x110)

$ = 16**3 + 16**4
69632 (0x11000)

使用bc

如果你想要稍微高级一点的计算,你可以将其传输到bc像这样:

=() {
    local IFS=' '
    local calc="${*//p/+}"
    calc="${calc//x/*}"
    bc -l <<<"scale=10;$calc"
}

= 'sqrt(2)' # Returns 1.4142135623
= '4*a(1)'  # Returns pi (3.1415926532)

提供的功能bc如下(可在 中找到man bc):

sqrt ( expression )
       The value of the sqrt function is the square root of the expression.  
       If the expression is negative, a run time error is generated.

s (x)  The sine of x, x is in radians.

c (x)  The cosine of x, x is in radians.

a (x)  The arctangent of x, arctangent returns radians.

l (x)  The natural logarithm of x.

e (x)  The exponential function of raising e to the value x.

j (n,x)
       The Bessel function of integer order n of x.

它还像编程语言一样支持ifforwhile和 变量。不过,如果您愿意,最好将其写入文件。

请记住,它将替换函数/变量名称中的px。最好删除替换项。

使用gcalccmd

您还可以进行函数调用gcalccmd(从gnome-calculator)像这样:

=() {
    local IFS=' '
    local calc="$*"
    # Uncomment the below for (p → +) and (x → *)
    #calc="${calc//p/+}"
    #calc="${calc//x/*}"
    printf '%s\n quit' "$calc" | gcalccmd | sed 's:^> ::g'
}

= 'sqrt(2)' # Returns 1.4142135623
= '4^4'     # Returns 256

可用的功能似乎是(直接取自源代码),==表示等效函数:

ln()
sqrt()
abs()
int()
frac()
sin()
cos()
tan()
sin⁻¹() == asin()
cos⁻¹() == acos()
tan⁻¹() == atan()
sinh()
cosh()
tanh()
sinh⁻¹() == asinh()
cosh⁻¹() == acosh()
tanh⁻¹() == atanh()
ones()
twos()

答案4

我建议您创建一个简单的函数来进行基本的 Python 计算。在您的文件中可以像这样.bashrc

calc() {
    python3 -c 'import sys; print(eval(" ".join(sys.argv[1:])))' "$@"
}

calc 5 + 5
# Returns 10

result="$(calc 5+5)"
# Stores the result into a variable

如果您想进行更高级的数学运算,可以使用以下导入math模块所有函数的方法。(请参阅这里了解更多信息)

calc() {
    python3 -c 'from math import *; import sys; print(eval(" ".join(sys.argv[1:])))' "$@"
}

calc 'sqrt(2)'  # Needs quotes because (...) is special in Bash
# Returns 1.4142135623730951

result="$(calc 'sqrt(2)')"
# Stores the result into a variable

(注意:因为 Python 是一种编程语言,所以有些事情可能看起来很奇怪,例如**幂和%模)

或者你可以创建一个 Python 脚本calc

#!/usr/bin/python3
from math import *
import sys
print(eval(' '.join(sys.argv[1:])))

将其放在变量中包含的目录中PATH并设置其可执行标志以获取calc与上面相同的命令(无需创建 Bash 函数来运行 Python 脚本)。

如果您想要纯 Bash 中的方法,请使用 steeldriver 的答案。此答案仅在您需要更高级的函数(即 from math)时才真正有用,因为与 Bash 相比,Python 相对较慢。


我不确定这是否会破坏您的“切换到 python 它可以做到这一点&我不希望这样做。”的注意事项,但您不需要输入交互式提示,并且可以在 Bash 中访问结果,因此这个答案似乎是有效的(至少对我来说)。

相关内容