在 Git 别名的位置参数中传递字符串

Passing string in positional parameter for Git alias

我正在尝试创建一个 git 别名,它将字符串作为整个位置参数。

例如我有一个别名如下:

my-alias = "!f() { \
     param1 = ; \
     param2 = ; \
     rem_param = ${@:3};\
     };f"

我想使用别名:

$ git my-alias abc "this is one parameter" 11 22 44

这里我的参数应该是

param1 = abc
param2 = "this is one parameter"
rem_pram = 11 22 44

我设置它的方式开始将字符串中的每个单词都视为一个单独的参数。那么问题来了,有什么方法可以把字符串当作一个参数吗?

当您使用 ! 启动 Git 别名时,它告诉 Git 为您的别名调用 shell。默认情况下,shell 用空格扩展单词,因此您对 param2 的分配仅包含 "this"。要解决这个问题,您需要双引号您的论点。由于此处已经有双引号,因此需要转义它们。此外,要获得语法上有效的赋值,您还需要删除等号周围的空格。

所以事情看起来像这样:

my-alias = "!f() { \
    param1=\"\"; \
    param2=\"\"; \
    rem_param=\"${@:3}\"; \
};f"

我还应该指出,因为 Git 总是使用 /bin/sh 作为别名的 shell(除非它是为不同的别名明确编译的) ${@:3}语法仅适用于将 bash 用作 /bin/sh 的系统。这个别名在大多数 Debian 和 Ubuntu 系统上失败,其中 /bin/sh 是破折号。