이 경우 왜 "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

이러한 세 가지 변환은 매개변수에서 오류 코드, 이름 및 문자열을 제거하므로 나머지 매개변수는 스크립트 9행의 루프에 편리하게 배치할 수 있습니다 $@.for

관련 정보