Не считается плохой практикой не использовать $
для переменных внутри арифметического вычисления. Что касается переносимости, то ((…))
вообще не POSIX, поэтому он не будет работать в оболочках типа dash. Он будет работать в zsh и ksh. С другой стороны, $((…))
находится в POSIX и работает во всех современных оболочках в стиле sh -.