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

时间:2017-08-30 22:15:51

标签: bash zsh

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

我尝试做的是在~/.aliases下面创建一个函数。

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

当我使用此"别名"时,这会给我这个错误消息gc install project

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"

如何让这个别名按照我想要的方式工作?

1 个答案:

答案 0 :(得分:2)

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

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

但是,我鼓励您承担将,正确引用的参数传递给gc的责任,这样您就不必担心shell会发生什么对$*等字符进行操作

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

gc "install my *awesome* project"