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 中发帖之前需要更多咖啡。
我现在使用的是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 中发帖之前需要更多咖啡。