我在某处看到建议使用以下“git commit”的快捷方式:
function gc {
git commit -m "$*"
}
这应该允许您在 shell 中内联编写提交消息,无需引号或任何其他内容。例如:
gc This is a commit message
问题是,如果提交消息本身包含括号或引号,它似乎不起作用。(我在提交消息中使用了很多括号/引号。)有谁精通 bash 脚本艺术,可以建议一个更好的快捷方式吗?
答案1
我不认为这是你的函数的问题(或者更准确地说,我不认为这是你可以在你的函数中解决的问题)。bash 在调用你的函数之前会解析命令行(包括解释带引号的字符串、各种括号表达式等)——甚至在它调用你的函数之前。决定调用你的函数。因此,当您输入类似 的内容时gc fixed Greg's bug
,bash 将要求您在执行函数之前关闭引号内的字符串;当您输入 时gc printf("%s", integervar) not a good idea
,bash 会对括号提出异议,甚至无法确定所请求的命令/函数/内容。
我推测使用的目的$*
是为了避免在命令行上引用备忘录,但这只能避免在消息中引用空格。如果消息包含其他 shell 元字符,则必须适当引用或者转义它们:
gc "fixed Greg's bug"
gc 'printf("%s", integervar) not a good idea'
gc 'fixed this & deferred that'