我正在尝试使用git
快捷方式提交消息。由于别名不支持参数,我想出了这个函数:
function gcm() { git commit -m "$@" }
我的期望是提交一条消息,甚至不输入这样的引号:
gcm create cli module
但是我得到一个错误,可能是由于扩展all-params符号时的字符串插值。
error: pathspec 'cli' did not match any file(s) known to git.
error: pathspec 'module' did not match any file(s) known to git.
如何修复该功能,以便我可以使用别名来避免输入引号?
更新
我非常喜欢这个快捷方式,所以我必须为每个人制作一个复制粘贴友好版本的解决方案
alias gcm='function() { git commit -a -m "$*" }'
答案 0 :(得分:6)
您希望"$*"
不是"$@"
,因为您希望将参数展开为单个单词而不是多个单词。
这是"$*"
扩展实际需要的少数几次之一。通常不是。
答案 1 :(得分:2)
使您的提交消息成为一个参数,而不是一系列单独的参数。
gcm () { git commit -m "$1"; }
并像这样调用它:
gcm "My commit message"
这样,您就可以获得在提交消息中输入的确切文本,而不会发生以下情况:
*
这样的字符来阻止shell的特殊解释。如果由于某种原因更改IFS
的值,则会影响提交消息的内容:
$ gcm () { echo "$*"; }
$ gcm my commit message
my commit message
$ IFS=:
$ gym my commit message
my:commit:message