Regex 带有bash脚本egrep的Git alias命令会产生不同的结果

Regex 带有bash脚本egrep的Git alias命令会产生不同的结果,regex,git,bash,grep,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 -

下面是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
子句甚至没有运行。事实上(因为我是OSX),它几乎像是运行了
grep
命令!这样:(注意
grep
vs
egrep

以前有人见过这个吗

我已经读过这些问题,但它们与我的情况不同。最上面的一个是最近的,但与shell命令别名的运行位置有关(repo的顶层)


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

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

不相关,但
-L
-n
xargs
的互斥选项;只使用最后一个。是的!除旧版模式外:“旧版模式下的旧版说明,-L选项将所有新行视为行尾,无论行是空的还是以空格结尾。此外,-L和-n选项并不相互排斥。”谢谢!我还发现,删除scond反斜杠是有效的:
\\*\124; master
[alias]
  em = "!git branch --merged | egrep -v '\\\\*\\\\|master' | xargs -L 1 -n 1 echo"