"[@]"가 bash for 루프의 변수에 수행하는 작업

"[@]"가 bash for 루프의 변수에 수행하는 작업

나는 Gentoo의 ebuild가 어떻게 만들어지는지 조사 중이었고 다음 코드를 발견했습니다:

_VIM_PLUGIN_ALLOWED_DIRS=(
    after autoload colors compiler doc ftdetect ftplugin indent keymap
    macros plugin spell syntax
)

local d
for d in "${_VIM_PLUGIN_ALLOWED_DIRS[@]}" "${@}"; do
                [[ -d "${d}" ]] || continue
                doins -r "${d}"
            done 

내가 아는 한 _VIM_PLUGIN_ALLOWED_DIRS이것은 목록입니다. d지역 변수입니다.
내가 이해하지 못하는 [@]것은 _VIM_PLUGIN_ALLOWED_DIRS[@]. 일반적으로 나는 그것을 생략 [@]하고 값을 d반복합니다 ._VIM_PLUGIN_ALLOWED_DIRS

무엇을 하고 있나요? 그 목적은 무엇입니까?

본 적도 없고 , 다음에 무엇을 할지 [@]모르겠습니다 .${@}

추신: doins다른 곳에서 정의된 외부 함수입니다.

미리 감사드립니다

답변1

일반적으로 [@]를 생략하고 _VIM_PLUGIN_ALLOWED_DIRS 값을 반복합니다.

Bash에서도 사용할 수 있는 ksh 스타일 배열에서 인덱스 없이 배열을 참조하면 인덱스에 있는 요소만 제공됩니다 0. 이는 인덱스를 사용하여 배열을 참조하면 모든(null이 아닌) 요소가 제공되는 zsh와 다릅니다.

특수 인덱싱은 @배열의 모든 요소를 ​​고유 필드로 가져오는 데 사용됩니다. $@모든 위치 매개변수(스크립트 또는 함수의 매개변수)로 유사하게 확장됩니다.

예를 들어

arr=(foo "bar doo")
printf "<%s> " "$arr"; echo       # '<foo>'
printf "<%s> " "${arr[@]}"; echo  # '<foo> <bar doo>'

두 경우 모두 값을 필연적으로 엉망으로 만드는 단어 분리기와 와일드카드를 인용 "${arr[@]}"하고 피해야 합니다."$@"

바라보다:

관련 정보