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

В 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 
  • Извлечь значения из форматированного текста
  • Разный формат в терминале vs в .txt документе
  • Получение ошибки со сном и аргументом в sh-скрипте
  • Добавление текста после определенной строки файла в скрипте Bash
  • Сценарий оболочки для записи выбранных полей в одну строку
  • find -exec не работает в скрипте bash, но работает в терминале
  • Найдите шаблон в файле и переместите его в новые файлы по одному
  • Grep -m 1 не работает
  • Эхо-вывод результатов в неустойчивом порядке в BASH
  • Как переименовать многие файлы из любых последовательных имен файлов?
  • Команда, чтобы получить счет списка заблокированных пользователей, разблокирован, истек
  • Interesting Posts

    Не удалось войти в Spark, используя статический IP-адрес после перенаправления портов

    Проблема с передачей переменной sed

    Ошибка сценария оболочки (: не найден )

    sed, чтобы удалить все строки с рисунком и добавить строки в конце

    Есть ли файл Bash, который всегда будет использоваться в интерактивном режиме независимо от того, является ли он логином или недействительным?

    Простое LiveCD работает только на сервере Xorg

    «Удалить при записи» с devicemapper и Docker

    Статическая адресация VLAN сети

    Что означает chmod?

    Как прекратить поиск «родительского» скрипта?

    WIFI через SDIO через USB. Должен ли я отражать это в дереве устройств?

    Как я могу получить звук, работающий на моем Powerbook G4 15 «под управлением Debian 8.6?

    Печать строк между двумя шаблонами с SED

    GNU Emacs; Предлагает ли версия графического интерфейса больше, чем возможность иметь меню графического интерфейса?

    Flash-плеер на Scientific Linux 6.5

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