Linux shell中bash和zsh等命令的匹配策略是什么?

Linux shell中bash和zsh等命令的匹配策略是什么?,linux,bash,shell,zshrc,Linux,Bash,Shell,Zshrc,我现在使用的是zshshell,但我假设它的命令匹配策略与bash相同。事情是这样的: 我想生成一个alias命令,它使用模板文件创建一个新的.cpp文件,并将第一个参数作为新文件名。我还为Java模板编写了一个别名 以下是.zshrc中的函数: 奇怪的是,只有javagen别名起作用。使用cppgen时,外壳会打印: usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file cp [-R [-

我现在使用的是zshshell,但我假设它的命令匹配策略与bash相同。事情是这样的:

我想生成一个alias命令,它使用模板文件创建一个新的.cpp文件,并将第一个参数作为新文件名。我还为Java模板编写了一个别名

以下是.zshrc中的函数:

奇怪的是,只有javagen别名起作用。使用cppgen时,外壳会打印:

usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
经过一段时间的努力,我终于意识到shell将我的cppgen命令视为cp。在我将别名从cppgen更改为cgen后,一切正常


那么,这是否意味着shell不会尝试匹配精确的命令,而是匹配最短的命令呢?

谢谢大家的评论。现在我可以将别名设置为cppgen。我没有改变任何事情。
不知道发生了什么。。。在StackOverflow中发布之前,我可能需要更多的咖啡。

我没有太多使用zsh,但是如果一个名为cppgen的函数覆盖cp命令,我会非常惊讶。您究竟是如何使用哪些参数调用cppgen函数的?在运行set-x之后,显示调用cppgen的结果,并提供一个实际的使用模式示例。别名优先于函数;查看别名列表,看看是否已将cppgen定义为别名。
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory