在 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
是破折号。
我正在尝试创建一个 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
是破折号。