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

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

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 ), которые мне не нужны, поэтому любое подталкивание (возможно?) Не будет делать то, что я хочу.

  • Получить значение DISPLAY по имени пользователя
  • Скрытие командных сообщений в сценарии командной оболочки
  • Как я могу передать только stderr в zsh?
  • Переключение оболочек на одно задание cron
  • получить корень документа apache с помощью сценария оболочки
  • удалить _ как префикс из нескольких файлов в каталоге в Soalris
  • Сделайте программу в трубе, думайте, что она имеет tty
  • Проверьте, установлены ли все перечисленные пакеты в bash
  • 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 
    Linux и Unix - лучшая ОС в мире.