Как добавить счетчик циклов в foreach в csh

В цикле foreach CSH или цикле for, как я могу добавить итератор цикла или счетчик, который увеличивается с 10 до 1000 с шагом 20?

Что-то вроде foreach i (1..20..5) или for (i=1;i<20;i++).


person SkypeMeSM    schedule 22.02.2011    source источник


Ответы (3)


Если у вас есть команда seq, вы можете использовать:

foreach i (`seq 1 5 20`)
  ... body ...
end

Если у вас нет seq, вот версия, основанная на ответе @csj:

@ i = 1
while ($i <= 20)
  ... body ...
  @ i += 5
end
person Jeremiah Willcock    schedule 22.02.2011
comment
Или для BSD и OS X: jot - 1 20 5 - person Dennis Williamson; 22.02.2011

Любая документация, которую я нашел в Интернете, указывает на отсутствие цикла for. Однако можно использовать цикл while. На самом деле я не знаю csh, поэтому следующее приблизительно основано на том, что я прочитал:

set i = 10
while ($i <= 1000)
    # commands...
    set i = $i + 20
end
person csj    schedule 22.02.2011
comment
На самом деле это были бы @ i = 1 и @ i = $i + 1 - person Dennis Williamson; 22.02.2011
comment
@Dennis Спасибо за исправление синтаксиса. Что касается значений, вопрос запрашивает счетчик, который идет от 10 до 1000 с шагом 20. Таким образом, начальное значение 10 и + 20 каждый раз в цикле. - person csj; 23.02.2011
comment
Цикл csh for вызывается с foreach. На самом деле, если вы введете csh for в поле поиска Google, он покажет foreach как первый вариант. - person shellter; 07.03.2011

Или вы можете использовать expr. у меня сработало следующее (в tcsh, но csh должно быть таким же):

% set n=0
% foreach x (`ls $A*`)
foreach? set n=`expr $n + 1`
foreach? echo $n
foreach? end

вывод 1 2 3 4 и т.д.

person Tim V    schedule 06.07.2018