@lekam

Как создать массив с ведущими нулями в Bash?

Казалось бы, чего проще:
#!/bin/bash

hr=(00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23)

for i in ${hr[@]}; do
echo ${hr[i]}
done

но не тут то было:
user@userver:$ ./stat.sh
00
01
02
03
04
05
06
07
./stat.sh: строка 7: 08: слишком большое значение для основания (неверный маркер «08»)

Bash думает, что если число начинается с 0, то оно в восьмеричной системе счисления и числа 8 в ней нет. Что делать?
  • Вопрос задан
  • 272 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
for i in ${hr[@]}; do
echo ${hr[i]}
done

Bash думает, что если число начинается с 0, то оно в восьмеричной системе счисления и числа 8 в ней нет. Что делать?

Выбрать, что же именно у тебя лежит в массиве -- строчки или индексы. И если выбрал строчки, то не интерпретировать их тут: echo ${hr[i]} как индексы. А если выбрал индексы, то следовать правилам написания чисел.

Я бы сделал так:
#!/bin/bash

hr=(00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23)

for i in ${hr[@]}; do
echo $i
done
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Не существует такого понятия, как "число с ведущим нулем".
Ведущий ноль это не часть числа а просто форматирование вывода.
Поэтому просто пользуйтесь printf с указанием формата, в вашем случае %02d (d - число, 02 - 2 цифры с ведущим нулем)
#!/bin/bash

hr=(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23)

for i in ${hr[@]}; do
printf "%02d\n" ${hr[i]}
done
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы