回答:
dc
は非常に古風なツールであり、やや古いですbc
。ウィキペディアのページを引用するには:
これは最も古いUnixユーティリティの1つであり、Cプログラミング言語の発明よりも前のものです。そのビンテージの他のユーティリティと同様に、強力な機能セットを備えていますが、構文は非常に簡潔です。
構文は逆ポーランド記法です。これは基本的に、引数(つまり数値)が最初に来て、その後に演算子が続くことを意味します。基本的なdc
使用例は次のとおりです。
echo '3 4 * p' | dc
どこp
計算の結果を印刷するために必要です。bc
一方、より馴染みのある中置表記法を使用しているため、より直感的に使用できます。以下にbc
使用例を示します。
echo '3 * 4' | bc
bc
POSIXによって標準化されているので、おそらく2つのうちのよりポータブルなものです(少なくとも最新のシステムでは)。あなたが手動の電卓の仕事をしているなら、それは間違いなく選択です(あなたがいくぶんマゾヒストでない限り)。dc
ただし、ここでも使用できます。逆ポーランド記法が便利な場合を次に示します。合計したい数値のストリームを出力するプログラムがあるとします。例えば:
23
7
90
74
29
ストリームにdc
a +p
を追加するだけでよいので、これを行うのは非常に簡単です(少なくとも、各演算子が2つ以上の数値を取ることができる最新の実装では)。
{ 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には、まだエコー '3 * 4' 表記にコンパイルできる-c
フラグbc
があります| bc`はに等しい。linux.die.net/man/1/bcおよびfreebsd.org/cgi/man.cgi?query=bc&sektion=1を参照してくださいdc
. For example
echo '3 * 4' | bc -c | dc
dc
を使用していますか?Ubuntu 14.04およびOS Xでは、+
オペレーターは常にスタックから2つの値を操作します
bc -c
では奇妙で異なることを行います(-c
フラグは文書化されていません)。にパイプしようとするとdc
、大量のエラーが発生します(パイプなしの出力dc
は非常に不可解です@iK3:K4:*W@r\n@i
)。
2つの基本的な違いdc
は、逆ポーランド記法を使用することです。出力を生成するためにも、明示的なコマンドが必要です。
次のようにbc
言うと、2つの整数を追加できます。
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
逆ポーランド記法電卓であることと、私はいつもHPを使用したので、私が実際に使用して好むポーランド記法電卓逆dc
にするbc
が、私は、彼らはあなたが複雑な数学的計算を実行する必要がまだ使用、いつでも両方だと言うでしょう。多くの場合、これらを使用して10進数の基数10から16および2を基数に変換しますが、AWKスクリプト内からも表形式データの列を集計するために使用しました。
dc
も言語だと主張しています。例codegolf.stackexchange.com/a/47921/11259
私の謙虚な意見と可能な限り少ない言葉で、GNU dcはGNU bcと3つの点で異なります。
1)bcの数学ライブラリが気に入らない場合、初等算術を行う際にできるだけ多くのキーストローク(1月Janukasiewiczの言葉:括弧なし表記)を保存し、本質に集中し、注意散漫を避ける。
2)Microsoft Windows 7のコマンドラインでは、GNU dcが消費するメモリ(〜320K)はGNU bc(〜360K)よりも少なくなります。
3)GNU bcよりもGNU dcでのきめ細かい制御。たとえば、スタックおよびレジスタコマンドはGNU bcにはありません。
両方のバージョン1.07.1 win32はhttps://embedeo.org/ws/command_line/bc_dc_calculator_windows/にあります
expr
コマンドラインやスクリプトでの単純な計算によく使用します。