Что такое POSIX-совместимая альтернатива if ((...))? - PullRequest
1 голос
/ 18 марта 2019

POSIX стандартизирует $(( ... )) как арифметический синтаксис, как можно увидеть в разделе 2.6.4 https://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html

Однако, дефис не поддерживает if (( ... )) для проверки, имеет ли арифметическое выражение ненулевой вывод.

Как сделать это переносимым на все POSIX-совместимые оболочки?

1 Ответ

1 голос
/ 18 марта 2019

Поскольку $(( ... )) является POSIX-совместимым, а test - POSIX-совместимым, вы можете $(( ... )) выдавать результат, который затем можно оценить с помощью test или его синонимом [.

Поскольку логические выражения в арифметическом выражении выдают 1 для true или 0 для false, вы можете напрямую проверить их результат.

Например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...