2つの数字を比較したいですbc
。これによるとStackOverflowで高い評価を受けた回答、次のようにすることができます。
printf '%s\n' '1.2 > 0.4' | bc
bc
ステートメントが真であることを示すために STDOUT に送信されます1
(または、ステートメントが偽の場合は 0)。
他のすべての演算子とは異なり、関係演算子 ("<", ">", "<=", "">=", "==", "!=") は if、while、または for ステートメントでのみ使用されます。 。
私は間違って理解しているかもしれませんが、言語では上記の例の構文を許可していないようです。
関係演算子を独立して使用すると、bc
POSIXに違反しますか?それでは、例をどのように書き直すべきですか?
答え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に感謝します。