#bash #shell #syntax #seq
#bash #оболочка #синтаксис #seq
Вопрос:
Я пытаюсь выполнить цикл по списку целых чисел, начинающихся следующим образом:
start=000
for i in $(seq -w $start 48 006);
Однако, когда я пробую этот приведенный выше код, цикл, кажется, повторяется один раз, а затем завершается.
Что мне нужно изменить? (Начальные нули должны остаться)
Комментарии:
1. Почему вы хотите использовать
seq
? Используйте встроенные математические операторы без разветвления внешних процессов
Ответ №1:
Не могли бы вы, пожалуйста, попробовать следующее.
start=0
diff=6
for i in $(seq $start $diff 48);
do
printf 'dn' $i
done
Результат будет следующим.
000
006
012
018
024
030
036
042
048
Проблема в опробованном коде:
Я полагаю, что вы указали неправильный синтаксис в, seq
это должно быть startpoint
тогда, increment_number
тогда endpoint
, например—>( seq(start_point increment end_point)
). Поскольку вы указали их неправильно, таким образом, они печатаются только один раз в цикле.
В вашей попытке он принимает начальную точку за 0 и должен выполняться до 6 с разницей в 48, что невозможно, поэтому он печатает только самое первое целочисленное значение, что достаточно справедливо.
РЕДАКТИРОВАТЬ: Согласно комментарию @Cyrus sir добавление встроенного решения BASH здесь без использования seq
.
for ((i=0; i<=48; i=i 6)); do printf 'dn' $i; done
Комментарии:
1. @hallettwx: с помощью встроенных команд bash:
for ((i=0; i<=48; i=i 6)); do printf 'dn' $i; done
Ответ №2:
seq
для ввода требуется начало, приращение и завершение.
Вы изменили приращение на finish: seq -w $start 48 006
означает начать с нуля, увеличить на 48, чтобы закончить на 6. Простое исправление seq -w $start 6 48
. Примечание: 006 не требуется, просто 6, поскольку seq
ширина чисел будет равна двум местам.