Warum wird in diesem Fall der Befehl „Shift“ verwendet?

Warum wird in diesem Fall der Befehl „Shift“ verwendet?

Ich schreibe Debootstrap neu, damit es zu mir passt und für die Ausbildung. Warum der Befehl „shift“ im Interaktionscode in der Datei „functions“? Es werden nicht so viele Argumente gesendet, um „shift“ zu verwenden, und meines Wissens sind Funktionsargumente nur in der Funktion zugänglich.

Beispiel:

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
}

Antwort1

Die drei Verschiebungen entfernen den Fehlercode, den Namen und die Zeichenfolge aus den Argumenten, sodass die restlichen Argumente bequem $@für die forSchleife in Zeile neun des Skripts verfügbar sind.

verwandte Informationen