나는 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[@]}"
하고 피해야 합니다."$@"
바라보다: