unix 命令行终端上的乘法

yvt65v4c  于 2022-11-23  发布在  Unix
关注(0)|答案(8)|浏览(157)

我用一个串行终端为我们的实验提供输入。我发现使用

$ echo "5X5"

只返回字符串"5X5"。是否有执行乘法运算的命令?

jm2pwxwz

jm2pwxwz1#

是的,您可以使用bash's built-in Arithmetic Expansion $(( ))进行一些简单的计算

$ echo "$((5 * 5))"
25

有关运算符的完整列表,请查看Bash参考手册中的Shell算术部分。
为了完整性起见,正如其他人指出的,如果需要任意精度,bcdc会更好。

omjgkv6w

omjgkv6w2#

对于更高级和更精确的数学,请考虑使用bc(1)。

echo "3 * 2.19" | bc -l 
6.57
ax6ht2ek

ax6ht2ek3#

内部方法

Bash支持arithmetic expansion$(( expression ))。例如:

$ echo $(( 5 * 5 ))
25

外部方法

许多实用程序都提供算术运算,包括 bcexpr

$ echo '5 * 5' | /usr/bin/bc
25

$ /usr/bin/expr 5 \* 5
25
2j4z5cfb

2j4z5cfb4#

经典的解决方案是:

expr 5 \* 5

expr只适用于整数操作数。另一个不错的选项是:

echo 5 5\*p | dc

dc可用于非整数操作数。

pb3s4cty

pb3s4cty5#

一个简单的shell函数(不需要sed)就可以解释“5X5”

$ calc() { bc -l <<< ${*//[xX]/*}; }
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25
ars1skjm

ars1skjm6#

我使用的函数使用bc,因此支持浮点计算:

c () { 
    local a
    (( $# > 0 )) && a="$@" || read -r -p "calc: " a
    bc -l <<< "$a"
}

示例:

$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797

Bash的算术扩展不支持浮点数(但Korn shell和zsh支持)。
示例:

$ ksh -c 'echo "$((3.0 / 4))"'
0.75
o7jaxewo

o7jaxewo7#

我有一个简单的脚本用于此:
me@mycomputer:~$ cat /usr/local/bin/c

#!/bin/sh

echo "$*" | sed 's/x/\*/g' | bc -l

它将x更改为*,因为*是shell中的特殊字符。使用方法如下:

  • c 5x5
  • c 5-4.2 + 1
  • c '(5 + 5) * 30'(如果表达式包含任何括号,则仍需使用引号)。
k97glaaz

k97glaaz8#

如果你喜欢python并且可以选择安装一个包,你可以使用我做的这个utility

# install pythonp
python -m pip install pythonp

pythonp "5*5"
25

pythonp "1 / (1+math.exp(0.5))"
0.3775406687981454

# define a custom function and pass it to another higher-order function
pythonp "n=10;functools.reduce(lambda x,y:x*y, range(1,n+1))"     
3628800

相关问题