Eu estava olhando como os ebuilds do Gentoo são feitos e encontrei o seguinte código:
_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
Tanto quanto sei, _VIM_PLUGIN_ALLOWED_DIRS
é uma lista. d
é uma variável local.
O que não entendo é o [@]
in _VIM_PLUGIN_ALLOWED_DIRS[@]
. Normalmente eu omitiria o [@]
, e apenas faria d
uma iteração sobre _VIM_PLUGIN_ALLOWED_DIRS
os valores de .
O que isso está fazendo? Qual é o seu propósito?
Eu nunca vi [@]
, nem sei o que o ${@}
faz depois
PS: doins
é uma função externa definida em outro lugar
desde já, obrigado
Em matrizes de estilo ksh que o Bash também possui, referenciar a matriz sem um índice forneceria apenas o elemento em index
0
. Isso é diferente de zsh, onde referenciar uma matriz com um índice forneceria todos os elementos (não vazios).O índice especial
@
é usado para obter todos os elementos das matrizes como campos distintos.$@
da mesma forma se expande para todos os parâmetros posicionais (argumentos para o script ou função).Por exemplo
Observe que, em ambos os casos, você deve citar
"${arr[@]}"
e"$@"
evitar que a divisão de palavras e o globbing atrapalhem inevitavelmente os valores.Ver: