"$@" é uma invenção da Bourne shell (1979). Isso significa expandir para a lista de parâmetros posicionais, como se você tivesse digitado "$1" "$2" "$3"... .
Quando David Korn adicionou suporte à matriz no início dos anos 80, estendeu esse conceito para matrizes com a sintaxe "${array[@]}" . zsh também suporta o formato "$array[@]" mais curto.
"$@" refere-se aos parâmetros posicionais (a partir de $1 ), é um pouco como uma matriz, mas exceto em zsh ou yash , não exatamente. Por um lado, $@ começa no índice 1, enquanto outros arrays em ksh ou bash começam em 0. ${@[@]} não funciona em ksh ou bash .
Os únicos shells em que "${@[@]}" funciona são zsh e yash . zsh é o único em que "$@[@]" funciona. Não adianta usá-lo sobre o padrão "$@" . O que poderia ser mais útil é algo como dizer: "$@[1,3]" para obter os 3 primeiros parâmetros posicionais.
Se o ponto é que você gostaria de usar uma sintaxe parecida com uma matriz, em zsh , você pode usar "$argv[@]" ( $argv é uma matriz que se refere aos parâmetros posicionais, como csh / tcsh / fish ).