[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