Почему «09» и «08» являются недопустимыми числами, «07» и «06» хороши
Поскольку предшествующее целое число 0
является обычным сокращением, означающим числовосьмеричное .
printf "%d\n" 010 0100
8
64
printf "%o\n" 8 64 0100
10
100
100
printf "%04o\n" 8 64 0100
0010
0100
0100
Как с этим работать?
Использование целого числа bash: перед числом 10#
Под bash выТаким образом, можно определить, какая база используется для чисел
echo $(( 10#0100))
100
echo $(( 10#0900))
900
echo $(( 10#0900 ))
900
и
echo $(( 8#100 ))
64
echo $(( 2#100 ))
4
Конечно!
ТамВ мире всего 10 типов людей: те, кто понимает двоичный код, и те, кто не понимает.
Использование bash Расширение параметров
Для этого вам нужно использовать переменную
a=09
echo ${a#0}
9
Это будет работать нормально, пока у вас не останется только один 0
для сброса.
a=0000090
echo ${a#*0}
000090
echo ${a##0}
000090
Для этого вы можете использовать extglob
функцию:
echo ${a##*(0)}
0000090
shopt -s extglob
echo ${a##*(0)}
90
Использование floating point
с printf
printf "%.0f\n" 09
9
Мне нравится использовать -v
параметр printf
для установки некоторых ваriable:
printf -v a %.0f 09
echo $a
9
или даже если
a=00090
printf -v a %.0f $a
echo $a
90