bc:POSIX 是否禁止独立使用关系运算符?

bc:POSIX 是否禁止独立使用关系运算符?

我想比较两个数字bc。根据这个StackOverflow 上评价很高的答案,我可以这样做:

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

bc发送1到 STDOUT,表明该语句为 true(如果该语句为 false,则返回 0)。

根据 POSIX 页面bc:

与所有其他运算符不同,关系运算符(“<”、“>”、“<=”、“">=”、“==”、“!=”)仅作为 if、while、或在 for 语句内。

也许我误解了,但这种语言似乎不允许使用上面示例中的语法。

独立使用关系运算符是否bc违反了 POSIX?如果是这样,我应该如何重写我的例子?

答案1

也许我误解了,但这种语言似乎不允许使用上面示例中的语法。

该示例假定 GNU bc,它向 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 提供的更短、更容易观看的版本。

相关内容