Если я пишу следующее в терминал удара:
A="0012"
B=$((A+1))
echo $B
Я добираюсь 11, Не 13, как я ожидал!!!!!
Я погуглил вокруг, и я не могу объяснить это вообще или разработать, как я мог увеличить число. (Я на самом деле хочу закончить с B = "0013" и увеличить один каждый раз, поскольку я использую это в качестве префикса к моим резервным копиям),
Поэтому числа, запускающиеся с 0
, рассматривают как Восьмеричные bash
, следовательно это делает Восьмеричный (Основа 8) дополнение. Для получения Сложения в десятичной форме для этой структуры необходимо явно определить Основу или не использование 00
в целом.
Для Десятичного числа, Основа равняется 10, обозначенному 10#
:
$ A="10#0012"
$ echo $((A+1))
13
Можно попробовать эту команду для получения ответа:
A="0012"
echo $A + 1 | bc
[еще 116] информация приблизительно bc
команда может быть найдена здесь .
bc
страница справочника:
NAME
bc - An arbitrary precision calculator language
SYNTAX
bc [ -hlwsqv ] [long-options] [ file ... ]
DESCRIPTION
bc is a language that supports arbitrary precision numbers with interactive execution of statements. There are some similarities
in the syntax to the C programming language. A standard math library is available by command line option. If requested, the
math library is defined before processing any files. bc starts by processing code from all the files listed on the command line
in the order listed. After all files have been processed, bc reads from the standard input. All code is executed as it is read.
(If a file contains a command to halt the processor, bc will never read from the standard input.)
This version of bc contains several extensions beyond traditional bc implementations and the POSIX draft standard. Command line
options can cause these extensions to print a warning or to be rejected. This document describes the language accepted by this
processor. Extensions will be identified as such.
Альтернативный метод может быть должен сохранить Ваши переменные как целые числа и преобразовать их в строку в конце:
A=12
B=$((A+1))
echo $B
13
C=$( printf '%04d' $B )
echo $C
0013
Этот стиль работы с целыми числами в математике и преобразовании для строкового представления для ответа более интуитивен мне, поскольку я привык к ОСНОВНОМУ программированию. Я ценю Bash, не имеет переменной, вводящей как C и ОСНОВНОЙ, но симулирующий его делает делает меня счастливым.