"$@"
é 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
).