Как запретить Bash интерпретировать восьмеричный код вместо целочисленного?

Как запретить Bash интерпретировать восьмеричный код вместо целочисленного?

Я пишу скрипт Horoscope RSS в качестве введения в проект Unix/Linux и столкнулся с проблемой, которую мой профессор не смог исправить за то время, что я мог остаться после занятий. Поскольку я не мог понять, как использовать фактические даты в качестве того, что нужно проверить, я подумал, что попробую базовую арифметику, используя ввод пользователя в виде стандартных чисел в формате ММДД. По его словам, скрипт, похоже, считывает ввод как восьмеричный код, а не как целое число. Вот пример скрипта:

    elif [ "$olddate" -gt 1121 ] && [ "$olddate" -lt 1131 ] || [ "$olddate" -gt 1200 ] && [ "$olddate" -lt 1222 ]
then
echo "You are Sagittarius"
exit
elif [ "$olddate" -gt 1221 ] && [ "$olddate" -lt 1232 ] || [ "$olddate" -gt 0100 ] && [ "$olddate" -lt 0120 ]
then
echo "You are Capricorn"
exit

Это голые кости, я убрал часть RSS. "olddate" - ожидаемый ввод из моего приглашения на чтение. В то время как 1121 - 1131, 1200 - 1222 и 0100 - 0120 работают, ничего между 1221 - 1232 не работает. Он решил, что это проблема, так как указание 113 без начального 0 работало для Козерога. Я также только что столкнулся с проблемой, когда 0323, который должен был дать мне Овна (-gt 0320 && -lt 0332), дал мне Водолея (чьи даты -gt 0119 && -lt 0132 || -gt 0200 && -lt 0219), а также 0417 не работал (это другой диапазон дат для Овна, -gt 0400 && -lt 0420).

Что мне сделать, чтобы BASH интерпретировал ввод как реальные числа? Он попытался изменить приглашение на чтение, чтобы ожидать «userdate» в качестве ввода, а затем добавить

olddate=`printf '%d\n' "$userdate"`

но это не сработало. Заранее спасибо всем, кто сможет мне в этом помочь!

решение1

Вы можете принудительно преобразовать число в определенную систему счисления в bash следующим образом:

$ foo=400
$ echo $((8#$foo))
256
$ bar=0100
$ echo $((10#$bar))
100

В общем случае формат $((base#value)).

Связанный контент