Por que o comando "shift" está sendo usado neste caso?

Por que o comando "shift" está sendo usado neste caso?

Estou reescrevendo o debootstrap para me adequar e para a educação. Por que o comando "shift" no trecho de código de interação no arquivo "funções"? Não há tantos argumentos enviados para usar "shift" e, como eu sei, os argumentos de função são acessíveis apenas em função.

Exemplo:

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
}

Responder1

As três mudanças removem o código de erro, o nome e a string dos argumentos para que o restante dos argumentos fique convenientemente $@no forloop da linha nove do script.

informação relacionada