Answers:
dc
是一个非常过时的工具,比bc
。引用Wikipedia页面:
它是最古老的Unix实用程序之一,甚至早于C编程语言的发明。像那个年代的其他实用程序一样,它具有强大的功能集,但语法极为简洁。
语法是反波兰符号,这基本上意味着参数(即数字)在运算符之后。dc
用法的基本示例是:
echo '3 4 * p' | dc
在p
需要打印计算结果的位置。bc
另一方面,使用更熟悉的后缀表示法,因此使用起来更直观。这是bc
用法示例:
echo '3 * 4' | bc
bc
POSIX是POSIX标准化的,因此两者之间的可移植性可能更高(至少在现代系统上如此)。如果您正在做手动计算器工作,那么绝对是选择(除非您有点受虐狂)。dc
仍然可以使用,在这种情况下,反向抛光符号很有用。假设您有一个程序可以输出要汇总的数字流,例如:
23
7
90
74
29
要做到这dc
一点非常简单(至少在现代的实现中,每个运算符可以使用两个以上的数字),因为您只需要+p
在流中追加a ,例如:
{ gen_nums; echo +p } | dc
但这bc
更复杂,因为我们不仅需要+
在每个数字之间放置一个a 并确保所有内容都在同一行,而且还要确保在末尾有一个换行符:
{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
gen_nums
示例变得非常复杂bc
。它可以简化为:gen_nums | paste -sd+ | bc
bc
,这只是一个前端工具,bc
可以将符号编译为的符号,dc
并通过管道将其插入dc
以获得结果。在FreeBSD上,仍然有一个-c
标记bc
,您可以使用该标记将其编译为dc
符号. For example
echo'3 * 4'| bc`等于echo '3 * 4' | bc -c | dc
。参见linux.die.net/man/1/bc和freebsd.org/cgi/man.cgi?query=bc&sektion=1
dc
您在使用哪个?在Ubuntu 14.04和OS X上,+
操作员始终在堆栈上使用正好两个值进行操作
bc -c
做了一些奇怪而又不同的事情(并且该-c
标志未记录)。如果我尝试将其管道传输到dc
,则会遇到一堆错误(并且没有管道传输的输出dc
是非常神秘的@iK3:K4:*W@r\n@i
)。
dc
是一个计算器,而bc
实际上是一种语言。请参阅他们的手册页。
公元前dc是反向抛光台式计算器,支持无限精度运算。它还允许您定义和调用宏。通常,直流从标准输入读取数据;如果给定任何命令参数,则它们是文件名,并且dc在从标准输入读取之前读取并执行文件的内容。所有正常输出均为标准输出;所有错误输出均为标准错误。
bc是一种通过语句的交互式执行支持任意精度数字的语言。语法与C编程语言有一些相似之处。可通过命令行选项使用标准数学库。如果需要,则在处理任何文件之前定义数学库。bc首先以列出的顺序处理命令行中列出的所有文件中的代码。处理完所有文件后,bc从标准输入中读取。所有代码均在读取时执行。(如果文件包含暂停处理器的命令,则bc将永远不会从标准输入中读取。)
实际上,这取决于您最终想要做的数学运算。使用无法进行某些操作dc
。这些年来,除了其他几个命令行计算器工具之外,我还使用了这两种工具。有关其他示例,请参见“ 命令行表达式求解器? ”。
dc
是反向抛光符号计算器,并且由于我一直使用HP反向抛光符号计算器,所以我实际上更喜欢使用它dc
,bc
但是我想在需要执行复杂的数学计算的任何时候它们都仍在使用。我经常使用它们将数字b / w以10为基数转换为以16为基数和以2为基数。
dc
也是一种语言。例如codegolf.stackexchange.com/a/47921/11259
以我的拙见,用最少的话来说,GNU dc与GNU bc在3个方面有所不同:
1)如果不考虑BC的数学库,则在进行初等算术时应尽可能地节省击键次数(用JanŁukasiewicz的话:无括号的表示法),以便将更多的精力集中在要点上并避免分散注意力。
2)在Microsoft Windows 7的命令行中,GNU dc比GNU bc消耗的内存(〜320K)少(〜320K)。
3)GNU dc中的粒度控制比GNU bc中的粒度控制要多得多,例如,GNU bc中没有堆栈和寄存器命令。
两者的1.07.1 win32版本位于https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
expr
经常在命令行和脚本中使用简单的计算。