创建以 + 或 - 开头的别名

创建以 + 或 - 开头的别名

大多数时候,我发现自己正在做:

% 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

在那种情况下引用+不会产生预期的效果,因为它只告诉zlezsh 的命令行编辑器)按+字面意思理解。命令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

相关内容