Если я напишу следующее в терминале Bash:
A="0012"
B=$((A+1))
echo $B
Я получаю 11, а не 13, как я ожидал !!!!!
Я гуглил и не могу ничего объяснить, или понять, как мне увеличить число. (На самом деле я хочу получить B = "0013" и увеличивать единицу каждый раз, когда я использую это в качестве префикса для моих резервных копий)
Ответы:
Это связано с тем, что числа, начинающиеся с,
0
считаются октальнымиbash
, следовательно, происходит добавление октальных (базовых 8). Чтобы получить десятичное дополнение для этой структуры, вам нужно явно определить Основу или не использовать ее00
полностью.Для десятичного числа основание равно 10, обозначается как
10#
:источник
Вы можете попробовать эту команду, чтобы получить ответ:
Более подробную информацию о
bc
команде можно найти здесь .bc
справочная страница:источник
echo
и канала, вы можете использовать синтаксис Bash «здесь строка». Эффект тот же, но ИМХО "здесь строка" красивее:bc <<< "$A + 1"
:-)bc
команды в одно или два предложения в дополнение кhere
ссылке.Альтернативным методом может быть сохранение ваших переменных в виде целых чисел и преобразование их в строку в конце:
Этот стиль работы с целыми числами в математике и преобразования в строку для ответа более интуитивен для меня, так как я привык к программированию на Бейсике. Я ценю, что Bash не имеет типизированной переменной, как C и BASIC, но притворство делает меня счастливым.
источник
A="0012"; A=$((10#$A))