bc 与 dc 有何不同?

syn*_*gma 42 command-line bc calculator

dcbc计算器有什么区别?

我应该什么时候使用dc,什么时候使用bc

Gra*_*eme 47

dc是一个非常古老的工具,比bc. 引用维基百科页面

它是最古老的 Unix 实用程序之一,甚至早于 C 编程语言的发明。像那个年代的其他实用程序一样,它具有一组强大的功能,但语法非常简洁。

语法是一种反向波兰符号,这基本上意味着参数(即数字)首先出现,然后是运算符。dc用法的一个基本示例是:

echo '3 4 * p' | dc
Run Code Online (Sandbox Code Playgroud)

p需要打印的计算结果。bc另一方面,使用更熟悉的中缀符号,因此使用起来更直观。下面是一个bc使用示例:

echo '3 * 4' | bc
Run Code Online (Sandbox Code Playgroud)

使用哪一种?

bc由 POSIX 标准化,因此可能是两者中更便携的(至少在现代系统上)。如果您正在做手动计算器工作,那么它绝对是您的选择(除非您有点受虐狂)。dc尽管如此,它仍然可以使用,这里有一个反向波兰符号派上用场的情况。想象一下,你有一个程序,它输出一个你想要总计的数字流,例如:

23
7
90
74
29
Run Code Online (Sandbox Code Playgroud)

要做到这dc一点非常简单(至少在现代实现中,每个运算符可以采用两个以上的数字),因为您只需要将 a 添加+p到流中,例如:

{ gen_nums; echo +p } | dc
Run Code Online (Sandbox Code Playgroud)

bc它更复杂,因为我们不仅需要+ 每个数字之间放置 a并确保所有内容都在同一行上,还要确保最后有一个换行符:

{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
Run Code Online (Sandbox Code Playgroud)

  • 有趣的事实:传统上,`bc` 只是一个前端工具,它将`bc` 表示法编译为`dc` 表示法,并将其通过管道传输到`dc` 中以获得结果。在 FreeBSD 上,仍然有用于 `bc` 的 `-c` 标志,你仍然可以使用它编译为 `dc` 表示法。例如`echo '3 * 4' | bc` 等于 `echo '3 * 4' | bc -c | 直流`。请参阅 http://linux.die.net/man/1/bc 和 http://www.freebsd.org/cgi/man.cgi?query=bc&sektion=1 (18认同)
  • 嗯,你用的是哪个 `dc`?在 Ubuntu 14.04 和 OS X 上,`+` 运算符总是对堆栈外的两个值进行操作 (16认同)
  • 您已经使用 `bc` 将 `gen_nums` 示例变得极其复杂。它可以简化为:`gen_nums | 粘贴 -sd+ | 公元前` (13认同)
  • `dc` 用法的正确示例:`gen_nums_nonnegative | dc -e '0 0 [+?z1<m]dsmxp'`。`dc` 的这个脚本在循环中读取并一一添加数字,然后打印结果。有关负数,请参阅 [note](//stackoverflow.com/a/453290/1300170)。 (2认同)

dev*_*ull 10

两者之间的基本区别是dc使用反向波兰表示法。它甚至需要显式命令才能产生输出。

您可以通过以下方式添加两个整数bc

bc <<< "2+4"
Run Code Online (Sandbox Code Playgroud)

它会6自己在一条线上生产。但是,在dc你需要说:

dc <<< "2 4 +p"
Run Code Online (Sandbox Code Playgroud)

您还可以使用 做很多有趣的事情dc,例如,请参阅我在此处的回答以进行制作

Hello World!
Run Code Online (Sandbox Code Playgroud)

使用dc.

dc<<<“8 9*P101P108P108P111P4 8*P81 6+P111P114P108P100P33P”