Bueno, se "$@"expande a la lista de parámetros posicionales, un argumento por parámetro posicional.
Cuando tu lo hagas:
set '' 'foo bar' $'blah\nblah'
cmd "$@"
cmdse invoca con esos 3 argumentos: la cadena vacía foo bary blah<newline>blah. El shell llamará a la llamada del execve()sistema con algo como:
execve("/path/to/cmd", ["cmd", "", "foo bar", "blah\nblah"], [envvars...]);
Si desea reconstruir una línea de comando de shell (que es código en el lenguaje de shell) que reproduciría esa misma invocación, podría hacer algo como:
awk -v q="'" '
  function shellquote(s) {
    gsub(q, q "\\" q q, s)
    return q s q
  }
  BEGIN {
    for (i = 1; i < ARGC; i++) {
      printf "%s", sep shellquote(ARGV[i])
      sep = " "
    }
    printf "\n"
  }' cmd "$@"
O con zsh, pidiendo diferentes tipos de citas:
$ set '' 'foo bar' $'blah\nblah'
$ print -r -- cmd "${(q)@}"
cmd '' foo\ bar blah$'\n'blah
$ print -r -- cmd "${(qq)@}"
cmd '' 'foo bar' 'blah
blah'
$ print -r -- cmd "${(qqq)@}"
cmd "" "foo bar" "blah
blah"
$ print -r -- cmd "${(qqqq)@}"
cmd $'' $'foo bar' $'blah\nblah'
O con zsh, basho ksh93(aquí para bash, YMMV con otros proyectiles):
$ set '' 'foo bar' $'blah\nblah'
$ printf cmd; printf ' %q' "$@"; printf '\n'
cmd '' foo\ bar $'blah\nblah'
También puede usar la opción xtrace del shell que hace que el shell imprima lo que va a ejecutar:
$ (PS4=; set -x; : cmd "$@")
: cmd '' 'foo bar' 'blah
blah'
Arriba, ejecutamos el :comando no-op con cmdy los parámetros posicionales como argumento. Mi caparazón los imprimió de una manera agradable y citada, adecuada para reintroducir en el caparazón. No todas las conchas hacen eso.
                 
                
$expansiones y otras comillas dobles. Es por eso que las otras respuestas usan comillas simples mientras van a algunas longitudes para manejar comillas simples dentro de la cadena, o usan las propias características del shell para producir una copia citada de la cadena.