Quando não são citados, não há diferença entre $@
e $*
. Ambos são iguais a $1
$2
… Mas não faça isso.
Com aspas duplas, "$@"
expande cada elemento como um argumento:
"$1"
"$2"
…
enquanto "$*"
se expande para todos os elementos mesclados em um único argumento:
"$1c$2c..."
em que c
é o primeiro caractere de IFS
. Se você desmarcar IFS
, c
será um espaço.
Você quase sempre deseja "$@"
. O mesmo vale para matrizes: "${myarray[@]}"