在命令行terminal上的乘法

我正在使用串行terminal为我们的实验室实验提供input。 我发现使用

$ echo "5X5" 

只是返回一个"5X5"的string。 有执行乘法操作的命令吗?

是的,您可以使用bash的内置算术扩展$(( ))来做一些简单的math运算

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

检查Bash参考手册中的Shell Arithmetic部分以获取操作符的完整列表。

正如其他人指出的那样,如果你需要任意的精度, bc或者dc会更好。

为了更高级和精确的math考虑使用bc(1)。

 echo "3 * 2.19" | bc -l 6.57 

内部方法

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

 $ echo $(( 5 * 5 )) 25 

外部方法

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

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

传统的解决scheme是:

  expr 5 \* 5 

另一个不错的select是:

  echo 5 5\*p | dc 

这两种解决scheme都只能用于整型操作数。

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

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

我使用这个使用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 

我有一个简单的脚本,我用这个:

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' (如果expression式包含任何括号,则仍需使用引号)。