shell - if (( ... )) 的 POSIX 兼容替代方案是什么?
问题描述
POSIX 标准化$(( ... ))
为算术语法,如https://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html的第 2.6.4 节所示
但是,dash 不支持if (( ... ))
测试算术表达式是否具有非零输出。
如何做到这一点才能移植到所有符合 POSIX 的 shell?
解决方案
由于$(( ... ))
符合 POSIX 并且符合test
POSIX,因此您可以$(( ... ))
发出一个结果,然后您可以使用test
或其同义词进行评估[
。
因为算术表达式中的布尔值会发出1
真或0
假,所以您可以直接针对它们的结果进行测试。
例如:
someVar=13
maxLimit=10
if [ "$(( someVar > maxLimit ))" -gt 0 ]; then
echo "ERROR: someVar value of $someVar is greater than maximum of $maxLimit" >&2
exit 1
fi
推荐阅读
- kubernetes - 是否可以使用 Kubernetes 进行热重载?
- python - 熊猫:将多个文件加载到数据框中
- r - 使用混淆矩阵和插入符号统计的灵敏度和特异性的零 R 模型计算
- r - 根据 p 值有条件地将 geom_smooth 添加到 ggplot 构面
- r - InteractiveComplexHeatmap 将无法识别跨 k-means 集群的画笔输入
- php - PHP比较两组多维数组进行匹配并构建导航菜单
- python - sklearn 中的 mlp 分类器使用什么权重初始化?
- html - Gridview 不响应调整网页或移动应用程序的大小
- angular - 如何在 Angular 中覆盖/匹配扩展 CurrencyPipe 方法类型
- vue.js - 开玩笑 使用 d3 时意外的令牌“导出”