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