2つの数値をbc
と比較したい。このあたり StackOverflowでの高評価の回答 、私は次のような方法でそれを行うことができます:
printf '%s\n' '1.2 > 0.4' | bc
bc
送信1
からSTDOUTへ。ステートメントが真であることを示します(ステートメントが偽だった場合は0を返します)。
他のすべての演算子とは異なり、関係演算子( '<'、 '>'、 "<="、 "> ="、 "=="、 "!=")は、if、while、またはforステートメント内。
おそらく私は誤解しているかもしれませんが、この言語は上の例で使用されている構文を許可していないようです。
bc
での関係演算子のスタンドアロン使用はPOSIXの違反ですか?もしそうなら、私の例をどのように書き直すべきですか?
おそらく私は誤解しているかもしれませんが、この言語は上の例で使用されている構文を許可していないようです。
この例では、GNU bcと想定しています。これにより、独自の拡張機能がbc言語に追加されます。 manual で説明されているように、-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のおかげで、目が短くて簡単になりました。