Кавычка +
в этом контексте не имеет желаемого эффекта, потому что она только говорит zle
(редактору командной строки zsh ) принимать +
буквально. Сам alias
команды по-прежнему получает строку «+x» в качестве первого аргумента командной строки и, таким образом, пытается проанализировать ее как параметр.
Если вы передадите опцию --
команде alias
, все, что находится после нее, будет использовано в качестве аргумента, даже если оно начинается с +
или -
. Чтобы использовать ваш пример:
alias -- +x='chmod +x'
alias -- -x='chmod -x'
Примечание: многие, но не все, другие инструменты ведут себя аналогично, встроенные в zsh, а также внешние команды. Например:
% 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
Конечно, вы также можете делать то, что предлагает rm
и использовать ./-negative
в большинстве (все?) из этих случаев, когда участвуют пути.
Одним заметным исключением является GNU echo
. Трудно заставить его распечатать любые параметры, которые он распознает, без дополнительного текста. Например "-n":
% /bin/echo -n
% /bin/echo -- -n
-- -n
% /bin/echo -n -e '-n\n'
-n