命令行终端上的乘法


115

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

$ echo "5X5"

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

Answers:



45

有关更高级和精确的数学运算,请考虑使用bc(1)。

echo "3 * 2.19" | bc -l 
6.57

19

内部方法

击支持算术扩展$(( expression ))。例如:

$ echo $(( 5 * 5 ))
25

外部方法

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

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

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

15

经典解决方案是:

 expr 5 \* 5

另一个不错的选择是:

 echo 5 5\*p | dc

这两种解决方案都只能使用整数操作数。


1
dc与浮子一起使用。尝试echo '4 k 50 7 / p' | dc。输出为7.1428。该k命令设置精度。
暂停,直到另行通知。

@Dennis在dc的两个不同实现中,我看到无需分配via即可进行浮点运算k。我当然记得默认精度为0(截断为整数)。我记错了吗,还是仅仅是新的实现改变了行为?
威廉·珀塞尔

dc由于我的代数更多,RPN更少,所以这些年来我很少使用过,所以我不记得了。在我使用的GNU系统上,默认值为0。一个旧的(1993)FreeBSD man页面提到默认值为零,而较旧的BSD man页面则没有。
暂停,直到另行通知。

顺便说一下(对于将来的读者),我的示例应该显示非整数操作数,而不是仅显示非整数结果,以便准确地反驳断言。永远不要害怕,echo '4 k 50.5 7 / p' | dc可以正常工作(输出:)7.2142
暂停,直到另行通知。

8

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

$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25

6

我使用此函数,该函数使用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

4

我有一个简单的脚本用于此:

me@mycomputer:~$ cat /usr/local/bin/c

#!/bin/sh

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

变为x*因为它*是外壳中的特殊字符。如下使用它:

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

我喜欢您的想法使用“ x”进行乘法运算。您可以类似地使用方括号而不是括号来避免引用。tr可用于对多个字符进行字符映射。
暂停,直到另行通知。

3

如果您喜欢python并可以选择安装软件包,则可以使用我制作的此实用程序

# 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.