dash
- это оболочка Debian Almquist и крайне облегченная версия полной POSIX-совместимой реализации оболочки /bin/sh
, цель которой - быть как можно меньше, создавая более быстрое время загрузки.
Операторы, такие как $((n++))
, $((--n))
и аналогичные, являются функциями, которые не требуются POSIX и поэтому не реализованы.
Чтобы увидеть, как dash интерпретирует эти операторы, см. Чепнераответ
Хорошая страница, объясняющая, как сделать ваш скрипт POSIX-совместимым, здесь .
2.6.4 АрифметикаРасширение: Арифметическое расширение предоставляет механизм для вычисления арифметического выражения и подстановки его значения.Формат для арифметического расширения должен быть следующим:
$((expression))
Выражение должно обрабатываться так, как если бы оно было в двойных кавычках, за исключением того, что двойные кавычки внутри выражения не обрабатываются специально.Оболочка должна развернуть все токены в выражении для раскрытия параметров, подстановки команд и удаления кавычек.
Затем оболочка должна обработать это как арифметическое выражение и подставить значение выражения.Арифметическое выражение должно обрабатываться в соответствии с правилами, приведенными в Арифметическая точность и операции , со следующими исключениями:
- Требуется только длинная целочисленная арифметика со знаком.
- Только константы десятичной, восьмеричной и шестнадцатеричной констант, указанных в стандарте ISO C, раздел 6.4.4.1, должны распознаваться как константы.
sizeof()
оператор и префикс и постфикс ++
и --
операторы не требуются. - Операторы выбора, итерации и перехода не поддерживаются.
источник: POSIX IEEE Std 1003.1-2017