一整天,我经常输入这样的内容:
git stash push -u -m "some phrase as a message"
我宁愿输入:
stpu some phrase as a message
所以在这个答案的帮助下,我在我的中创建了一个函数~./bashrc:
function stpu() {
git stash push -u -m "${@}"
}
Run Code Online (Sandbox Code Playgroud)
现在我可以输入stpu "some phrase as a message",这与我想要的非常接近。
如何调整我的函数,以便可以省略双引号?
我尝试了许多不同的变体(添加更多被转义的双引号、添加单引号等),但没有让它起作用。
"$*""$@"这会将您的所有参数连接到一个字符串中,并用空格分隔(默认情况下;IFS如果已覆盖,则为 中的第一个字符)。-m期望一个字符串跟随它(而不是每个单词一个单独的参数),所以这正是它想要的。
如果您想使用提交消息,请考虑作为示例:Make $(rm -rf ~) safe in an argument name用于安全修复。如果此字符串未加引号(或双引号),则该命令将在您的函数启动之前执行(这是有道理的:在知道其参数列表之后才能调用该函数),因此您的函数无能为力修理它。在这种情况下,使用单引号来防止发生命令替换是正确且安全的做法。
(以单引号是一个字符串包含单引号,可以考虑使用ANSI C类的字符串:$'I\'m a single-quoted string that contains a single quote')
或者,再举一个例子:Process only files matching *.csv-- 如果它没有被引用,则*.csv可以替换为您运行命令的目录中存在的 CSV 文件列表。同样,这发生在你的函数启动之前,所以函数内部没有任何东西可以阻止它。