Описание тега moc
Вы правы в том, что такая математика не по bash и большинство других снарядов, так как они следуют с конвенции, где номер, начиная с 0
- это восьмеричное, а не десятичное:
$ Эхо "$((124000000 - 097000000))"
Баш: 124000000 - 097000000: значение слишком велико для базы (ошибка маркер "097000000")
Одним из решений является правильно определить цифры на баш как база-10:
$ Эхо "$((10#124000000 - 10#097000000))"
27000000
Проблема в том, что без 10#
префикс, Баш предполагает, что число, которое начинается с нуля восьмеричной.
Кроме того, использование до н. э.
:
$ Эхо "124000000 - 097000000" | до н. э. -л
27000000
Или использовать на awk:
$ Эхо "124000000 097000000" | у awk '{печати 1-$$2}'
27000000
Сочетая математику и printf:
$ г=124000000
$ ч=097000000
$ е "Итого, разница во времени: %я Милли секунд\п" "$(Эхо "$г $ч" | до н. э. -л )"
Общая разница во времени: 27000000 Милли секунд
Или,
$ г=124000000
$ ч=097000000
$ Эхо "$г $ч" | у awk '{е "общее время разницу: %я миллисекунд\Н",$1-$2}'; )
Общая разница во времени: 27000000 Милли секунд
Документация
От человека Баша
:
Константы с 0 интерпретируются как восьмеричные числа. А ведущие символы 0x или 0x обозначает шестнадцатеричное. В противном случае, номера в форма [база#]N, где опционное основание-десятичное число между 2 и 64, представляющих арифметические базы, а n - номер в эту базу.
Сочетая математику и дата
$ Эхо "$(( $(День -Д '14:00:13.124' '+10#%ы%н') - $(День -Д '14:00:13.097' '+10#%ы%н') ))"
27000000
Если мы хотим преобразовать от наносекунд до миллисекунд:
$ Эхо "$(( ($(День -Д '14:00:13.124' '+10#%ы%н') - $(День -Д '14:00:13.097' '+10#%ы%н'))/1000000 ))"
27
$ Эхо "$(( ($(День -Д '14:00:05.320' '+10#%ы%н') - $(День -Д '14:00:04.909' '+10#%ы%н'))/1000000 ))"
411