[Comm] Арифметика в bash

Sergey Vlasov vsu на altlinux.ru
Чт Ноя 17 18:50:27 MSK 2011


On Thu, Nov 17, 2011 at 11:51:09AM +0400, Vladimir Karpinsky wrote:
> Уже некоторое время пытаюсь найти простое решение следующей
> проблемы: нужно производить простейшие арифметические операции (как
> правило + или -1 ;-)) с "юлианскими" днями года (date +%j).
> Сложность заключается в том, что формат такой даты JJJ, т.е. первые
> 99 дней года первая цифра 0, и bash считает это число восьмеричным,
> со всеми вытекающими последствиями. Хочется заставить bash работать
> с такими числами, как десятеричными, формат JJJ для результата
> вычисления желательно также сохранить. 

Именно в bash поддерживается синтаксис вида BASE#NUMBER с явным
указаним основания:

  $ bash -c 'a=011; echo $((10#$a))'
  11

Нужно учитывать, что в POSIX sh такой синтаксис не поддерживается,
поэтому в скриптах нужно явно указывать #!/bin/bash (использование
#!/bin/sh в ALT пока не проявится в виде ошибок, но в некоторых
дистрибутивах в роли /bin/sh может оказаться, например, dash).

Выводить числа в нужном формате можно через printf '%03d' $n .
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 198 байтов
Описание: Digital signature
Url     : <http://lists.altlinux.org/pipermail/community/attachments/20111117/ce58f035/attachment.bin>


Подробная информация о списке рассылки community