如何编写符合POSIX规范的Bash代码实现浮点数大小比较
POSIX 兼容 Shell 浮点数比较方案
问题根因
你原有代码不生效的核心原因是:POSIX 规范定义的 test 命令(即方括号语法 [)的算术比较运算符(-gt/-lt/-eq 等)仅支持整数比较,传入浮点数参数会触发语法错误,或得到不符合预期的判断结果。
解决方案
POSIX 标准要求所有兼容系统默认自带 awk 工具,可以直接用 awk 实现浮点数比较逻辑,调整后的代码如下:
a=0.2 b=0.1 if awk -v num1="$a" -v num2="$b" 'BEGIN{exit !(num1 > num2)}'; then echo "You are running an outdated version" fi
逻辑说明
- 通过
-v参数将 Shell 变量传入awk上下文,避免变量注入风险 BEGIN代码块不需要读取输入流,会直接执行比较逻辑awk中布尔真值为 1、假值为 0,通过取反后作为退出状态码返回,刚好匹配 Shellif判断的规则:条件成立时返回退出码 0,判断为真;条件不成立时返回退出码 1,判断为假
该实现完全符合 POSIX 规范,无任何非标准依赖,可在所有兼容 POSIX 的 Shell 环境中运行。
内容的提问来源于stack exchange,提问作者PythonicExperience
相关产品推荐
相关产品推荐

