bc:POSIXは関係演算子のスタンドアロン使用を禁止しますか?

bc:POSIXは関係演算子のスタンドアロン使用を禁止しますか?

2つの数字を比較したいですbc。これによるとStackOverflowで高い評価を受けた回答、次のようにすることができます。

printf '%s\n' '1.2 > 0.4' | bc

bcステートメントが真であることを示すために STDOUT に送信されます1(または、ステートメントが偽の場合は 0)。

POSIXページによるとbc:

他のすべての演算子とは異なり、関係演算子 ("<", ">", "<=", "">=", "==", "!=") は if、while、または for ステートメントでのみ使用されます。 。

私は間違って理解しているかもしれませんが、言語では上記の例の構文を許可していないようです。

関係演算子を独立して使用すると、bcPOSIXに違反しますか?それでは、例をどのように書き直すべきですか?

ベストアンサー1

私は間違って理解しているかもしれませんが、言語では上記の例の構文を許可していないようです。

この例では、bc言語に独自の拡張機能を追加するGNU bcを想定しています。記録されたとおり手動-s、正確なPOSIX bc言語を処理したり、-w拡張について警告したりするには、このスイッチを使用する必要があります。

$ echo '1.2 > 0.4' | bc -s
(standard_in) 2: Error: comparison in expression
$ echo '1.2 > 0.4' | bc -w
(standard_in) 2: (Warning) comparison in expression
1
$ echo '1.2 > 0.4' | bc
1

それでは、例をどのように書き直すべきですか?

$ printf 'if(%s > %s){a=1};a\n' 1.2 0.4 | bc -s
1

短くてアクセスしやすいバージョンを提供した@icarusに感謝します。

おすすめ記事