我正在尝试制作一个git
快捷方式来提交消息。由于别名不支持参数,我想出了这个函数:
function gcm() { git commit -m "$@" }
我的期望是提交一条消息,甚至不输入这样的引号:
gcm create cli module
但是我收到一个错误,可能是由于扩展全参数符号时的字符串插值。
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 "$*" }'
您希望
"$*"
不"$@"
,因为您希望将参数扩展为单个单词而不是多个单词。
这是为数不多的几次"$*"
扩张实际上是可取的。通常不是。
使提交消息成为单个参数,而不是一系列单独的参数。
gcm () { git commit -m "$1"; }
并像这样调用它:
gcm "My commit message"
这样,您将获得在提交消息中键入的确切文本,而不会发生以下情况:
- 多个连续空格折叠为一个空格
- 其他空格,例如转换为空格的制表符和换行 符
- 像
*
这样的字符无论如何都需要引用,以防止外壳的特殊解释。 如果
IFS
的值由于某种原因而更改,它将影响提交消息的内容:$ gcm () { echo "$*"; } $ gcm my commit message my commit message $ IFS=: $ gym my commit message my:commit:message