我知道我可以通过定义一个函数来解决这个问题,但我很好奇为什么分号会给我带来这么多错误?
;
是一个特殊的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()
函数进行一点修改,至少在某些情况下是明智的,但我强烈建议不要这样做。