この場合、なぜ「shift」コマンドを使用するのですか? [閉鎖]

この場合、なぜ「shift」コマンドを使用するのですか? [閉鎖]

私と教育に合わせてdebootstrapを書き直しています。 「functions」ファイルの対話型コードで「shift」コマンドを使用するのはなぜですか? 「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

これら3つの変換はパラメータからエラーコード、名前、および文字列を削除するため、残りのパラメータは9行のスクリプトのループに便利に配置できます$@for

関連情報