大多数时候,我发现自己正在做:
% chmod +x <file> #or +r or +w
因此,我想创建一个别名,例如:
% alias +x='chmod +x' # or
% alias \+x='chmod +x' # or
% alias '+x'='chmod +x'
但结果是:
zsh:错误的选择:
-x
还有其他方法可以创建上述别名吗?我目前将它们设置为
% alias c+x='chmod +x'
这并不是我想要的。
答案1
在那种情况下引用+
不会产生预期的效果,因为它只告诉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