Случайно обнаружил интересную особенность в Bash с переменными. Выглядит это так:
expr $456 + $457
Ответ: 113.
Причём даже если брать любые цифры от 1 до 9: сумма ${1..9}56 и ${1..9}57
неизменно 113. Это работает с любыми цифрами — сумма, конечно же, другая, но первый разряд числа с долларом будто исчезает при вычислении. А куда исчезает? Кто знает?
Однако, с нулём такой фокус не проходит:
expr $056 + $057
Выводит ошибку: expr: non-integer argument
Почему так происходит?
Попутно выяснил, что умножение при помощи expr делается именно через обратный слэш:
expr 5 * 3
— выдаст ошибку. А вот так:
expr 5 \* 3
— посчитает нормально.
Кто столкнулся с непонятным поведением expr при вычислениях, вот тут немного прояснили, откуда чего берётся, и что нужно делать, чтобы вычислялось нормально. Вкратце: нужно экранировать арифметические операторы.