Выполнить итерацию по списку с Seq и переменной

#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 ширина чисел будет равна двум местам.