使用bash脚本egrep的Git别名命令会产生不同的结果

时间:2015-10-20 16:30:37

标签: regex git bash grep

这是git中非常基本的shell别名的一个例子

[alias]
    em = "!git branch --merged | egrep -v '\\*\\|master' | xargs -L 1 -n 1 echo"

它回显了已经合并的分支,包括主分支(以及您当前的分支)。很简单。但是,运行此别名和脚本时结果会有所不同。例如:

will ~/example master 
$ git branch --merged | egrep -v '\\*\\|master' | xargs -L 1 -n 1 echo
feature
will ~/example master 
$ git em
feature
*
master

出于某种原因,egrep条款甚至不会运行。实际上(因为我是OS X),它几乎就像运行grep命令一样!像这样:(注意grep vs egrep

will ~/example master 
$ git branch --merged | grep -v '\\*\\|master' | xargs -L 1 -n 1 echo
feature
*
master

以前有人遇到过这个吗?

我已经阅读了这些SO问题,但他们并没有处理我的同样问题。最上面的一个是最接近的,但与shell命令别名的运行位置(repo的顶层)有关。

Why does running command as git alias gives different results?

Bash script produces different result when executed from shell prompt than executed by cron

1 个答案:

答案 0 :(得分:2)

在定义之前,别名定义似乎经历了一定量的shell处理(或至少是反斜杠处理)。将另一组转义反斜杠添加到别名中。

[alias]
  em = "!git branch --merged | egrep -v '\\\\*\\\\|master' | xargs -L 1 -n 1 echo"