在Git别名中转义$ num

时间:2012-10-02 22:51:37

标签: linux git git-config git-alias

我正在尝试为一个更简单的存储区别名,所以我可以做git load <stashname>,就像这一行:

load = !git stash list | grep ' $1$' | awk '{ print $1 }' | sed '$ s/:$//'; echo

不幸的是,awk的$1也被隐藏名称所取代。我怎么能逃脱这个$符号?试过\$,但是git说:

fatal: bad config file line 33 in /home/alvaro/.gitconfig

1 个答案:

答案 0 :(得分:1)

$ 1的替换都没有被替换。它们被单引号包围。该行末尾的; echo只是一个评论。所以它并没有真正做任何事情。如果你想让它成为别名的一部分,你需要用双引号括起整个事物。

<stashname>被添加到行的末尾(我假设这是echo的用途?)您建议的命令似乎想要回显stash@{n}之类的内容给出藏匿的名称。下面的别名会这样做。 (虽然它不是很有用)

[alias]
load = "!git stash list | grep \" $1$\" | awk '{ print $1 }' | sed '$ s/:$//' #"

$ 1的第一次出现被参数替换,因为它只被双引号括起来;我们需要逃脱。 awk的1美元不会被<stashname>替换。除了git已经允许你申请,按名称弹出窗口。

$ git stash list # produces no output
$ echo "something" > else.txt
$ git stash something
Saved working directory and index state On master: something
HEAD is now at 6d3fcf0 merged
$ git load something
stash@{0}

也许以这种方式看待它更容易

[alias]
test = "! echo $1 '$2' \"$3\" end; # "

结果

$ git test first second third
first $2 third end