Для циклов, вероятно, правильный способ сделать это, но вот забавная альтернатива:
echo -e {1..10}"\n" |xargs -n1 some_command
Если вам нужен номер итерации в качестве параметра для вашего вызова, используйте:
echo -e {1..10}"\n" |xargs -I@ echo now I am running iteration @
Редактировать: Было справедливо отмечено, что приведенное выше решение будет работать гладко только с простыми командами (без конвейеров и т. Д.). Вы всегда можете использовать sh -c
, чтобы делать более сложные вещи, но это того не стоит.
Другой метод, который я обычно использую, это следующая функция:
rep() { s=$1;shift;e=$1;shift; for x in `seq $s $e`; do c=${@//@/$x};sh -c "$c"; done;}
теперь вы можете назвать это как:
rep 3 10 echo iteration @
Первые два числа дают диапазон. @
будет переведено на номер итерации. Теперь вы можете использовать это и с трубами:
rep 1 10 "ls R@/|wc -l"
с указанием количества файлов в каталогах R1 .. R10.