LINUX.ORG.RU

Правильно передать аргументы функции в bash

 ,


1

3

У меня есть функция, которой может быть передано любое количество аргументов. Мне надо внутри первой функции передать эти аргументы, кроме первого, как есть (с тем же разбиением на строки), другой функции (вложенной), а внутри неё все оставшиеся аргументы (по-прежнему, «как есть») передать программе.

Т.е. если вызывается

func1 слово «строка» слово «строка» слово

то внутри func1 должно вызваться

func2 «строка» слово «строка» слово

а потом внутри func2 должна выполниться программа

program «строка» слово «строка» слово

Пожалуйста, подскажите, как это сделать, а то я уже запутался в $*, $@ и кавычках вокруг них. Заранее спасибо.

★★

func2() {
    program "$@"
}

func1() {
    func2 "${@:2}"
}

Ещё:

func1() {
    local head=$1
    shift # "удаляет" первый аргумент, но его значение сохранено в $head
    func2 "$@"
}

anonymous ()

Используй shift для вычленения первых аргументов, остальное передавай как «$@». Это значит передать все аргументы, и каждый экранировать, т.е. строки с пробелами передадутся как отдельные аргументы.

slovazap ★★★★★ ()
Ответ на: комментарий от slovazap

Учти что ${@:2} это башизм

Переведите, пожалуйста.

и не будет работать с другими шеллами.

Кроме ГНУ Баша? Неверно, разумеется. Сходу я вам могу назвать еще по крайней мере две очень распространенные оболочки, где это работает, а так — их, наверняка, больше.

Zmicier ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.