Как запустить команду для каждого номера в диапазоне

Я хочу сделать что-то вроде

specmd file5.awe specmd file6.awe specmd file7.awe specmd file8.awe specmd file9.awe specmd file10.awe specmd file11.awe specmd file12.awe 

Есть ли хороший способ сделать это? Лучший способ, о котором я могу думать, – это что-то вроде

 ruby -e "10.upto(15){|i| puts i}" | xargs -I {} specmd file{}.awe 

Который, очевидно, не очень хороший способ сделать это, поскольку он зависит от рубина и чувствует, что в этом случае рубин должен быть ненужным.

Примечание: есть больше файлов (например: file4.awe , file13.awe ), которые мне не нужны, поэтому любое подталкивание (возможно?) Не будет делать то, что я хочу.

  • Как сохранить переменную, которая увеличивается по индексу?
  • Как прокомментировать многострочные команды в сценариях оболочки?
  • Замените несколько пробелов одним, используя только «tr»
  • Как я могу передать stdout в другую программу?
  • Создавать копии файлов в одном каталоге
  • Расширение параметров для нескольких переменных
  • Что я могу узнать об этой части кода?
  • Перенаправить все стандартные для остальной части скрипта
  • 6 Solutions collect form web for “Как запустить команду для каждого номера в диапазоне”

    В bash вы можете создавать циклы, используя встроенную команду для итерации по диапазону:

     for i in {5..12} do specmd file${i}.awe done 

    Есть больше вариантов для других подобных ситуаций, я оставлю здесь ссылку для этого.

    http://www.cyberciti.biz/faq/bash-for-loop/

     for f in file[5-9].awe file1[012].awe do : stuff with "$f" files done 

    … не все шары равны.

    иначе вы можете сделать:

     x=4 while [ 13 -gt "$((x+=1))" ] do : stuff with "file$x.awe" done 

    … который имеет преимущество генерации своего итератора во время итерации и работает по умолчанию практически в любой скриптовой оболочке (как и в случае с глобусами) .

    С помощью zsh вы можете упростить команду с помощью специального цикла «loop»:

     n=5; m=12; repeat $((m-n+1)) specmd file$((n++)).awe 

    Я знаю, что это старый вопрос, но я не мог сопротивляться.

    Нет для цикла требуется, нет необходимости в цикле, просто чистая строка командной строки:

     echo file{5..12}.awe | xargs -n1 specmd 

    Использование C-стиля для цикла в bash или ksh93 :

     for ((i=5;i<=12;++i)); do specmd "file$i.awe"; done 

    Использование расширения скобки:

     for f in file{5..13}.awe; do specmd "$f"; done 

    Или, с xargs , в том же виде, что и у вас:

     printf '%s\n' {5..13} | xargs -I {} specmd file{}.awe 

    Больше альтернатив для zsh

     autoload zargs # best in ~/.zshrc zargs -n1 file{5..12}.awe -- specmd 

    или:

     for f (file{5..12}.awe) specmd $f 
    Interesting Posts

    Установка ffmpeg на Linux REHEL / CentOs 6.X

    Поиск процессов, вызывающих работу вентиляторов

    Можно ли запустить «unshare -n » как непривилегированный пользователь?

    Поддержка множества частот дискретизации при воспроизведении и записи в приложении, таком как Audacity

    Где установить окраску Vim при входе в удаленную машину

    Автоматическое определение правильных разрешений для определенного типа файла при копировании файла из файловой системы, отличной от Linux

    Чтение столбцов из файла, затем столбец в exsisting CSV-файл

    Bad ID3-теги при передаче mp3 на другое устройство

    как вычесть первое значение из последнего в столбце по строке в оболочке?

    Эффективное обнаружение файла / каталога на основе ключевого слова

    Как переопределить быстрые клавиши kde4

    Установите ffmpeg 0.7.1-5 из debian package

    Домены третьего уровня

    Проблема с Drbd – это по дизайну?

    Как мне вернуться к X?

    Linux и Unix - лучшая ОС в мире.