为什么我可以使别名以":"冒号开头,而不能以";"开头在zsh



我知道我可以通过定义一个函数来解决这个问题,但我很好奇为什么分号会给我带来这么多错误?

;是一个特殊的shell字符,用于分隔命令;例如:

% ls /; ls /etc

(大部分(和你输入的一样:

% ls /
% ls /etc

另一方面,:只是一个特殊的shell内置,可以被重写。

可能有一些技巧可以推翻这一点;你不能"只是";也可以用函数覆盖它,但我强烈建议不要使用它,因为我怀疑它只会给您带来混乱和错误。键盘上还有很多其他字符可以使用:-(


也就是说,您可以使用全局别名来覆盖;来调用函数:

% alias -g ';'='semicolon'
% semicolon() { print -r -- semicolon: $@ }
% ;hello
semicolon: hello

不过,您必须修改semicolon函数。

注意,这将在命令行上的所有处应用,包括在命令中间:

% ls ; ls 
ls: cannot access 'semicolon': No such file or directory
ls: cannot access 'ls': No such file or directory

您可以对semicolon()函数进行一点修改,至少在某些情况下是明智的,但我强烈建议不要这样做。

最新更新