Posix

bc:POSIX 是否禁止獨立使用關係運算符?

  • December 23, 2019

我想將兩個數字與bc. 根據StackOverflow 上這個高度評價的答案,我可以這樣做:

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

bc發送1到 STDOUT,指示該語句為真(如果該語句為假,它將返回 0)。

根據 POSIX 頁面bc

與所有其他運算符不同,關係運算符(’<’、’>’、"<="、">="、"=="、"!=" ) 僅作為 if、while、或在 for 語句中。

也許我誤解了,但這種語言似乎不允許上面範例中使用的語法。

獨立使用關係運算符是否bc違反了 POSIX?如果是這樣,我應該如何重寫我的範例?

也許我誤解了,但這種語言似乎不允許上面範例中使用的語法。

該範例假設使用 GNU bc,它為 bc 語言添加了自己的擴展。如其手冊中所述,您應該使用-s開關使其處理確切的 POSIX bc 語言,或者-w如果您希望它發出有關擴展的警告,則應使用開關:

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

如果是這樣,我應該如何重寫我的範例?

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

感謝@icarus 提供了更短、更簡單的眼睛版本。

引用自:https://unix.stackexchange.com/questions/558544