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

what is the matching strategy of commands in shell like bash and zsh?

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

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

下面是.zshrc中的函数:

function cppgen()
{
  cp ~/Documents/Templates/cpp_template.cpp ./.cpp
  vim ./.cpp
}

function javagen()
{
  cp ~/Documents/Templates/java_template.java ./.java
  vim ./.java
}

奇怪的是,只有 javagen 别名有效。当我使用 cppgen 时,shell 打印:

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。我没有改变任何东西。 不确定发生了什么......也许我在 Whosebug 中发帖之前需要更多咖啡。