Почему в данном случае используется команда «shift»?

Почему в данном случае используется команда «shift»?

Я переписываю debootstrap под себя и для образования. Зачем команда "shift" в коде взаимодействия в файле "functions"? Для использования "shift" передается не так много аргументов, и, как я знаю, аргументы функции доступны только в функции.

Пример:

error () {
# <error code> <name> <string> <args>
local err="$1"
local name="$2"
local fmt="$3"
shift; shift; shift
if [ "$USE_DEBIANINSTALLER_INTERACTION" ]; then
    (echo "E: $name"
    for x in "$@"; do echo "EA: $x"; done
    echo "EF: $fmt") >&4
else
    (printf "E: $fmt\n" "$@") >&4
fi
exit $err
}

решение1

Три сдвига удаляют код ошибки, имя и строку из аргументов, поэтому остальные аргументы удобно помещаются в $@цикл forв девятой строке скрипта.

Связанный контент