Я был удивлен, прочитав это в руководстве Bash, где описывается Арифметическое вычисление :
Внутри выражения на переменные оболочки можно также ссылаться по имени без использования синтаксиса раскрытия параметров.
Я пробовал, и действительно, var
ведет себя так же, как $ var
:
❯ var=9
❯ echo $(( var + 5 ))
14
❯ (( var < 10 )) && echo 'single digits!'
single digits!
Считается ли это плохой практикой? Переносится ли он на другие оболочки или это башизм?
Не считается плохой практикой не использовать $
для переменных внутри арифметического вычисления. Что касается переносимости, то ((…))
вообще не POSIX, поэтому он не будет работать в оболочках типа dash. Он будет работать в zsh и ksh. С другой стороны, $((…))
находится в POSIX и работает во всех современных оболочках в стиле sh -.