首页 > 解决方案 > if (( ... )) 的 POSIX 兼容替代方案是什么?

问题描述

POSIX 标准化$(( ... ))为算术语法,如https://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html的第 2.6.4 节所示

但是,dash 不支持if (( ... ))测试算术表达式是否具有非零输出。

如何做到这一点才能移植到所有符合 POSIX 的 shell?

标签: shellunixposix

解决方案


由于$(( ... ))符合 POSIX 并且符合testPOSIX,因此您可以$(( ... ))发出一个结果,然后您可以使用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

推荐阅读