创建函数时如何在bash中的双引号之间传递句子

创建函数时如何在bash中的双引号之间传递句子,bash,zsh,Bash,Zsh,我正在尝试创建一个别名,它是git commit-m“commit message”的缩写 我试图在下面的~/.alias中创建一个函数 gc() { git commit -m ""$@"" } 当我使用此“别名”gc安装项目时,会显示此错误消息 error: pathspec 'install' did not match any file(s) known to git. error: pathspec 'project' did not match any file(s) kn

我正在尝试创建一个别名,它是git commit-m“commit message”的缩写

我试图在下面的
~/.alias
中创建一个函数

gc()
{
    git commit -m ""$@""
}
当我使用此“别名”
gc安装项目时,会显示此错误消息

error: pathspec 'install' did not match any file(s) known to git.
error: pathspec 'project' did not match any file(s) known to git.
而我希望它是
git commit-m“install project”


如何使此别名按我所希望的方式工作?

因为目标是将
gc
的所有参数组合成一个字符串,用作
-m
的参数,所以您希望使用
$*
,而不是
$@
。此外,您不需要指定引号。在
git commit-m“install project”
中,引号不是参数的一部分;他们只是在那里指示
bash
安装项目是一个单词,而不是两个单独的单词,作为参数传递给
git

gc () {
    git commit -m "$*"
}
但是,我鼓励您负责将一个正确引用的参数传递给
gc
,这样您就不必担心shell将如何处理
$
*
等字符

gc () {
    git commit -m "$1"
}

gc "install my *awesome* project"