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

时间:2018-11-01 01:38:42

标签: git git-alias

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

例如我的别名如下:

my-alias = "!f() { \
     param1 = $1; \
     param2 = $2; \
     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

我设置的方式开始将字符串中的每个单词都当作一个单独的参数。那么问题是有什么办法将字符串视为一个参数?

1 个答案:

答案 0 :(得分:3)

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

所以事情看起来像这样:

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

我还应该指出,因为Git始终使用/bin/sh作为别名的外壳(除非它是为其他别名明确编译的),所以${@:3}语法仅适用于使用bash作为别名的系统。 /bin/sh。此别名在大多数/bin/sh为破折号的Debian和Ubuntu系统上失败。