A citação de + nesse contexto não tem efeito de efeito desejado porque apenas informa zle (editor de linha de comando do zsh ) para obter + literalmente. O comando alias propriamente dito ainda recebe a string "+ x" como primeiro argumento de linha de comando e, assim, tenta analisá-lo como opção.
Se você passar a opção -- para o comando alias , tudo depois dela será usado como argumento, mesmo que comece com + ou - . Para usar seu exemplo:
alias -- +x='chmod +x'
alias -- -x='chmod -x'
Nota: Muitas - mas não todas - outras ferramentas se comportam de maneira semelhante, zsh built-ins e comandos externos. Por exemplo:
% touch -negative
touch: invalid option -- 'n'
Try 'touch --help' for more information.
% touch -- -negative
% ls -negative
ls: invalid option -- 'e'
Try 'ls --help' for more information.
% ls -- -negative
-negative
% rm -negative
rm: invalid option -- 'n'
Try 'rm ./-negative' to remove the file '-negative'.
Try 'rm --help' for more information.
% rm -- -negative
Claro, você também pode fazer como rm sugere e usar ./-negative na maioria (todos?) desses casos em que os caminhos estão envolvidos.
Uma exceção notável é o% GNUecho. É difícil conseguir imprimir qualquer opção que ele reconheça sem texto adicional. Por exemplo "-n":
% /bin/echo -n
% /bin/echo -- -n
-- -n
% /bin/echo -n -e '-n\n'
-n