Ведущий 0говорит, что это восьмеричное. Если вы просто делаете x=10то , echo $((x+0))то шоу 10. Кроме того, нет необходимости в дополнительном $с ().
Терренс
2
Во многих синтаксических анализаторах чисел 010означает 8, потому что если поставить 0перед, значит восьмеричное, аналогично тому, как 0xв некоторых языках - шестнадцатеричное.
Дерек 朕 會 功夫
9
Это на самом деле важно знать при программировании. В большинстве языков 0триггеры восьмеричные, 0xшестнадцатеричные и 0bдвоичные.
Сет
Объяснения Downvote?
Тим
3
@ Почему бы не быть 8? ;-) О, не мое понижение, хотя, но, вероятно, потому что это слишком простой. Это довольно нормальное поведение.
Rinzwind
Ответы:
42
Числовые последовательности, начинающиеся с a 0, интерпретируются как восьмеричные числа.
Восьмеричный 10= десятичный 8.
Чтобы заставить bash рассматривать его как десятичное число, удалите начальный ноль или принудительное десятичное число с помощью:
N=010
N=$((10#$N))
Как правило, это работает для всех баз, просто замените 10на базу, которую вы хотите:
Отредактировал вопрос двумя способами, чтобы решить его.
Паби
1
@ Чтобы сделать это, вы можете использовать $ {N%?}, Чтобы вырезать последнюю цифру, а затем $ {N: -}, чтобы заменить пробел на 0.
Random832
@ Если да, то я не могу понять, как. $ {$ {N%?}: - 0} работает в zsh, но не в bash или ksh. (Кроме того, :-в моем комментарии выше должно было быть :-0}
Random832
Вы должны включить в свой ответ, что вы можете использовать любое основание с помощью « form [base #] n, где base - это десятичное число от 2 до 64, представляющее арифметическую базу, а n - это число в этой базе ». Source: bash ref
0
говорит, что это восьмеричное. Если вы просто делаетеx=10
то ,echo $((x+0))
то шоу10
. Кроме того, нет необходимости в дополнительном$
с()
.010
означает 8, потому что если поставить0
перед, значит восьмеричное, аналогично тому, как0x
в некоторых языках - шестнадцатеричное.0
триггеры восьмеричные,0x
шестнадцатеричные и0b
двоичные.Ответы:
Числовые последовательности, начинающиеся с a
0
, интерпретируются как восьмеричные числа.Восьмеричный
10
= десятичный8
.Чтобы заставить bash рассматривать его как десятичное число, удалите начальный ноль или принудительное десятичное число с помощью:
Как правило, это работает для всех баз, просто замените
10
на базу, которую вы хотите:источник
:-
в моем комментарии выше должно было быть:-0
}