Как пропустить первый аргумент в скрипте

В Linux Pocket Guide есть хороший пример того, как перебирать все аргументы в скрипте

for arg in $@ do echo "I found the argument $arg" done 

Я пишу сценарий, в котором все аргументы будут текстовыми файлами, и я буду конкатенировать все эти текстовые файлы и распечатать их на stdout, однако я должен исключить содержимое первого аргумента. Мой первый подход был бы чем-то вроде этого

 for arg in $@ do cat "$arg" done 

Однако это будет включать первый аргумент, и, как я уже упоминал, я хочу напечатать все, кроме первого.

4 Solutions collect form web for “Как пропустить первый аргумент в скрипте”

Вы можете использовать команду shift следующим образом:

 shift for arg in "$@" do cat "$arg" done 

Вы можете использовать команду shift для смещения аргументов, отбрасывая первый. Вот пример:

 arg1=$1 shift for arg in "$@"; do cat "$arg" done 

Вы можете использовать shift builtin для отбрасывания одного или нескольких позиционных параметров, но сначала проверьте количество параметров:

 if [ "$#" > 1 ]; then # Save first parameter value for using later arg1=$1 shift fi 

Вызов shift без какого-либо аргумента, означающего shift 1 .

Пересечение всех позиционных аргументов:

 for arg do : do something with "$arg" done 

В вашем случае вам вообще не нужен цикл, так как cat может работать с несколькими файлами:

 cat -- "$@" 

Вот тест shift вызова, когда нет позиционных аргументов:

 $ for shell in /bin/*sh /opt/schily/bin/[jbo]sh; do printf '[%s]\n' "$shell" "$shell" -c 'shift' done 

Вывод:

 [/bin/ash] /bin/ash: 1: shift: can't shift that many [/bin/bash] [/bin/csh] shift: No more words. [/bin/dash] /bin/dash: 1: shift: can't shift that many [/bin/ksh] /bin/ksh: shift: (null): bad number [/bin/lksh] /bin/lksh: shift: nothing to shift [/bin/mksh] /bin/mksh: shift: nothing to shift [/bin/pdksh] /bin/pdksh: shift: nothing to shift [/bin/posh] /bin/posh: shift: nothing to shift [/bin/sh] /bin/sh: 1: shift: can't shift that many [/bin/tcsh] shift: No more words. [/bin/zsh] zsh:shift:1: shift count must be <= $# [/opt/schily/bin/bsh] shift: cannot shift. [/opt/schily/bin/jsh] /opt/schily/bin/jsh: cannot shift [/opt/schily/bin/osh] /opt/schily/bin/osh: cannot shift 

Ну, bash молчал, не имея позиционных аргументов. Вызов с помощью заполнителя в $0 :

 "$shell" -c 'shift' _ 

сделанные варианты csh и schily bsh тоже молчат. В случае ошибки варианты zsh , csh и schily bsh не покидают неинтерактивный скрипт после сообщения об этом.

Вы можете использовать сортировку массива ${@:2} :

 $ foo () { echo "The args are ${@:2}" ;} $ foo spam egg bar The args are egg bar 
  • Измените значение в файле конфигурации или добавьте параметр, если он не существует?
  • список папок и их содержимое
  • Сохранять временную историю через скрипт
  • «Дружественные» имена цветов терминала в сценариях оболочки?
  • Поиск файлов в каталоге с парными именами
  • Усреднение и перемещение набора файлов
  • find, xargs и mv: переименование файлов с двойными кавычками, расширение и проблема с приоритетом bash
  • Можно ли создать zip-файл без использования zip-бинарного файла?
  • Запуск сценария оболочки с бродячим обеспечением
  • Самый простой способ переупорядочить столбцы и управлять текстовым файлом
  • Получить статус mongodb
  • Interesting Posts

    Как я могу исправить проблему запуска Xorg?

    Скрипт Bash: анализ подкаталога, а не текущих каталогов

    Как выйти из выбега при нажатии клавиши?

    Проверка файла vi .swp для предварительного восстановления

    Постоянный скрипт, чтобы проверить, работает ли мой веб-сервер с низким бюджетом vps?

    Вывод цитат для scp

    Как Linux отличается между открытием файла в режиме чтения и фактическим чтением данных из него?

    Использование ЦП с помощью модулей ядра, правил маршрутизации и пересылки

    Как скопировать символические ссылки как символические ссылки с одной машины на другую?

    Выполнение обратной задачи последовательно выполняется для нескольких Unices с xterm

    Ошибка Grub 21, если не присутствуют как SD-карта, так и live-usb

    Используйте список строк, чтобы заменить параметр sql, распечатывающий весь файл для каждой замены

    Linux: восстановление файлов из файла .vdi

    Обрезка длинной линии в Нано

    Очистка хром-файлов cookie с сайта при загрузке?

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