O objetivo de ${1+"$@"} para portabilidade.
POSIX definido $ @ se expandiria a nada se não houvesse argumentos posicionais . Mas o shell original do Bourne ( /bin/sh no Solaris 10 e antes) o expandia para a string vazia "" . Usar ${1+"$@"} é uma solução para isso, desde quando "$@" expandiu apenas se $1 foi definido.
Infelizmente, essa construção não funciona no zsh 3.xe no pre 4.3, porque o zsh executa a palavra dividir em ${1+"$@"} no modo de emulação sh ( shwordsplit foi definido) :
$ set -- '1 2'
$ for i in ${1+"$@"}; do echo $i; done
1
2
"$@" é tratado corretamente:
$ set -- '1 2'
$ for i in "$@"; do echo $i; done
1 2
Portanto, alias -g '${1+"$@"}'='"$@"' garante que a divisão de palavras nunca seja executada ao usar ${1+"$@"} . Isso permite que a construção ${1+"$@"} seja usada em zsh, já que ela será substituída por "$@" antes da expansão (você deve usar exatamente a cadeia de caracteres ${1+"$@"} , sem caracteres iniciais ou finais).
Outro trabalho em torno de você pode fazer, é ignorar completamente usando "$@" se não houver argumentos posicionais, verificando $# :
case $# in
(0) func ;;
(*) func "$@" ;;
esac
Demorou mais trabalhos, mas completamente portáteis.