Ответы:
dc
это очень архаичный инструмент и несколько старше, чем bc
. Цитировать страницу Википедии :
Это одна из старейших утилит Unix, предшествовавшая даже изобретению языка программирования C; как и другие утилиты этого винтажа, он обладает мощным набором функций, но чрезвычайно кратким синтаксисом.
Синтаксис является обратной польской нотацией, которая в основном означает, что аргументы (то есть числа) идут первыми, а затем оператор. Основной пример dc
использования:
echo '3 4 * p' | dc
Где p
требуется распечатать результат расчета. bc
с другой стороны, используется более знакомая инфиксная нотация, что делает его более интуитивным в использовании. Вот пример bc
использования:
echo '3 * 4' | bc
bc
стандартизирован POSIX и, вероятно, является более переносимым из них (по крайней мере, в современных системах). Если вы выполняете ручную работу с калькулятором, то это определенно выбор (если вы не являетесь мазохистом). dc
Тем не менее, здесь можно найти применение, в данном случае пригодится обратная польская запись. Представьте, что у вас есть программа, которая выводит поток чисел, который вы хотите суммировать, например:
23
7
90
74
29
Сделать это dc
очень просто (по крайней мере, в современных реализациях, где каждый оператор может принимать более двух чисел), поскольку вам нужно только добавить a +p
в поток, например:
{ gen_nums; echo +p } | dc
Но с bc
этим сложнее, так как нам нужно не только поставить +
между каждым число и убедиться, что все в одной строке, но и убедиться, что в конце есть новая строка:
{ 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 +
оператор всегда оперирует ровно двумя значениями вне стека
dc
использования: gen_nums_nonnegative | dc -e '0 0 [+?z1<m]dsmxp'
. Этот скрипт для dc
чтения и добавления чисел один за другим в цикле, а затем печатает результат. Смотрите примечание относительно отрицательных чисел.
bc -c
что-то странное и необычное (а -c
флаг недокументирован). Если я пытаюсь передать это dc
, я получаю кучу ошибок (и вывод без привязки dc
является очень загадочным @iK3:K4:*W@r\n@i
).
Основное различие между ними состоит в том, что dc
используется обратная польская запись . Это требует явных команд даже для того, чтобы произвести вывод.
Вы можете добавить два целых числа bc
, сказав:
bc <<< "2+4"
и он будет производить 6
на линии самостоятельно. Тем не менее, dc
вам нужно сказать:
dc <<< "2 4 +p"
Вы также можете сделать много забавных вещей, используя dc
, например, обратитесь к моему ответу здесь для производства
Hello World!
используя dc
.
dc <<< "8 9 * P101P108P108P111P4 8 * P81 6 + P111P114P108P100P33P"
dc
это калькулятор, тогда bc
как фактический язык. Смотрите их справочные страницы.
До нашей эрыdc - это настольный калькулятор с обратной полировкой, который поддерживает арифметику с неограниченной точностью. Это также позволяет вам определять и вызывать макросы. Обычно DC читает со стандартного ввода; если ему даны какие-либо аргументы команды, они являются именами файлов, и dc читает и выполняет содержимое файлов перед чтением из стандартного ввода. Все нормальные выходные данные являются стандартными; все ошибки выводятся на стандартную ошибку.
bc - это язык, который поддерживает числа произвольной точности с интерактивным выполнением операторов. Есть некоторые сходства в синтаксисе с языком программирования C. Стандартная математическая библиотека доступна в командной строке. Если требуется, математическая библиотека определяется до обработки любых файлов. bc начинает с обработки кода из всех файлов, перечисленных в командной строке, в указанном порядке. После того, как все файлы были обработаны, bc читает из стандартного ввода. Весь код выполняется так, как он читается. (Если файл содержит команду для остановки процессора, bc никогда не будет читать со стандартного ввода.)
Это действительно зависит от того, что вы в конечном итоге хотите сделать математически. Некоторые операции невозможны при использовании dc
. Я использовал оба эти года в дополнение к нескольким другим инструментам калькулятора командной строки. Смотрите " Решатель выражений командной строки? " Для некоторых дополнительных примеров.
dc
того, что я являюсь калькулятором обратной польской нотации, и поскольку я всегда использовал калькуляторы обратной польской нотации, я на самом деле предпочитаю использовать dc
его, bc
но я бы сказал, что они обе все еще используются в любое время, когда вам нужно выполнить сложный математический расчет. Я часто использую их для преобразования чисел от 10 ч / б до 16 и 2. Но я использовал их для подсчета столбцов в табличных данных также из скрипта AWK.
bc
был язык в том смысле, что он сделал dc
человека дружественным - не то, чтобы он был более мощным. В эти дни приложения разделяет LIBS, но bc
называли язык и dc
с калькулятором , потому что dc
сделали математику и bc
говорили математика - к dc
. Вот старая man
страница : был разработан язык BC
[1], который принимает программы, написанные на языках более высокого уровня, и компилирует выходные данные, которые интерпретируются DC. Некоторые из команд, описанных ниже, были разработаны для интерфейса компилятора и не просты для манипулирования пользователем.
dc
это также язык. например, codegolf.stackexchange.com/a/47921/11259
По моему скромному мнению и в двух словах, насколько это возможно, GNU dc отличается от GNU bc тремя способами:
1) Если математическая библиотека bc не представляет проблемы, чтобы сохранить как можно больше нажатий клавиш (по словам Яна Лукасевича: нотация без скобок) при выполнении элементарной арифметики, сконцентрироваться больше на основных моментах и избежать отвлекающих факторов.
2) В командной строке Microsoft Windows 7 GNU dc потребляет меньше памяти (~ 320 КБ), чем GNU bc (~ 360 КБ).
3) Более детальное управление в GNU dc, чем в GNU bc, например, команды стек и регистр отсутствуют в GNU bc.
Версия 1.07.1 win32 для обоих находится по адресу https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
expr
очень часто использую простые вычисления в командной строке и в скриптах.