bcを0で割ると0が終了するのはなぜですか?

bcを0で割ると0が終了するのはなぜですか?

失敗した終了状態を生成する迅速で宣言的な方法を考えて、ゼロに分割するというアイデアが浮上しました。bc良い考えになります。

ランタイムエラーが発生しましたが、終了ステータスがまだゼロであるという事実に驚きました。

$ echo 41 + 1 | bc
42
$ echo $?
0
$ echo 42/0 | bc
Runtime error (func=(main), adr=6): Divide by zero
$ echo $?
0
  • ゼロ以外の終了状態のためにbcユーティリティが失敗しないのはなぜですか?

注:ゼロ以外のクイックシャットダウン状態には、以下を使用しています。return 1

さらに、シェルチップ:

$ expr 1 / 0
expr: division by zero
$ echo $?
2

ベストアンサー1

bc実装された戻り状態はわずかに異なりますが、一般的なアイデアは、有効な入力を提供するとbc状態0で終了することです。42/0有効な入力です。構文上有効な式であっても読み取りエラーがないため、bcゼロが返されます。他のジョブの2行目を渡すと、そのジョブがbc実行されます。これはexpr、単一の算術式を評価する目的とは異なります。ここでは、単一式の結果によって戻り状態が決まります。

失敗を示す終了ステータスを生成する最も簡単な方法は、を呼び出すことですfalse。これはexpr 1 / 0難読化されたプログラミングコンテストでのみ可能です。

おすすめ記事