Используйте поддиапазон всех аргументов в функции Bash

У меня есть эта функция в скрипте Bash:

comp() {
    rsync -v --archive $1/ $TMP/$2 $3 $4 $5 $6 $7 $8 $9
}

Как видите, я делаю что-то особенное с аргументами $1 а также $2, Затем я просто добавляю все остальные из них в конец команды. Они идут в $9, но на самом деле все должно быть добавлено.

Должен быть более простой способ для этого?

2 ответа

Вы можете использовать расширение подстроки, которое может быть полезно в определенных ситуациях. Для этого, однако, я должен сказать, что предпочитаю решение Брайана о смещении, так как оно немного яснее. (Также решение Брайана - POSIX; расширение подстроки - расширение bash.)

comp () {

    rsync -v --archive "$1"/ "$TMP/$2" "${@:3}"

}

Я бы не стал называть это "проще", но вы можете сделать это:

comp() {
    archive=$1
    tempfile=$2
    shift 2
    rsync -v --archive $archive/ $TMP/$tempfile "$@"
}

Это избавляет вас от необходимости жестко кодировать от 3 до 11 долларов.

Другие вопросы по тегам