Подтвердить что ты не робот

Bash ошибка: слишком большое значение для базы (токен ошибки равен "09" )

При запуске этой части моего bash script am появляется сообщение об ошибке

Script

value=0
for (( t=0; t <= 4; t++ ))
do
d1=${filedates[$t]}
d2=${filedates[$t+1]}
((diff_sec=d2-d1))
SEC=$diff_sec
compare=$((${SEC}/(60*60*24)))
value=$((value+compare))
done

Выход

jad.sh: line 28: ((: 10#2014-01-09: value too great for base (error token is "09")
jad.sh: line 30: /(60*60*24): syntax error: operand expected (error token is "/(60*60*24)")

d1 и d2 - это даты в этой форме 2014-01-09 и 2014-01-10

Любое решение, пожалуйста?

4b9b3361

Ответ 1

Подготовьте строку "10 #" в начало ваших переменных. Это заставляет bash рассматривать их как десятичные, хотя начальный ноль обычно делает их восьмеричными.

Ответ 2

Что такое d1 и d2? Являются ли они датами или секундами?

Как правило, эта ошибка возникает, если вы пытаетесь выполнить арифметику с номерами, содержащими нулевой префикс, например. 09.

Пример:

$ echo $((09+1))
-bash: 09: value too great for base (error token is "09")

Чтобы выполнить арифметику с 0-префиксными номерами, вам нужно указать bash использовать base-10, указав 10#:

$ echo $((10#09+1))
10

Ответ 3

d1 и d2 - это даты в этой форме 2014-01-09 и 2014-01-10

а затем

((diff_sec=d2-d1))

Что вы ожидаете получить? ((diffsec=2014-01-09-2014-01-10))??

Вам нужно сначала преобразовать даты в секунды:

d1=$( date -d "${filedates[$t]}" +%s )
d2=$( date -d "${filedates[$t+1]}" +%s )
(( compare = (d2 - d1) / (60*60*24) ))
(( value += compare ))