我正在尝试创建一个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
我设置的方式开始将字符串中的每个单词都当作一个单独的参数。那么问题是有什么办法将字符串视为一个参数?
答案 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系统上失败。