2

我正在尝试创建一个将字符串作为整个位置参数的 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

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

4

1 回答 1

3

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

所以事情看起来像这样:

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

我还应该指出,因为 Git 总是使用/bin/sh作为别名的 shell(除非它被显式编译为不同的),所以${@:3}语法只适用于使用 bash as 的系统/bin/sh。此别名在大多数 Debian 和 Ubuntu 系统上都失败,其中/bin/shdash。

于 2018-11-01T02:00:44.860 回答