失敗した終了状態を生成する迅速で宣言的な方法を考えて、ゼロに分割するというアイデアが浮上しました。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
難読化されたプログラミングコンテストでのみ可能です。