Regex 带有bash脚本egrep的Git alias命令会产生不同的结果
下面是git中相当基本的shell别名示例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 -
[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
vsegrep
)
以前有人见过这个吗
我已经读过这些问题,但它们与我的情况不同。最上面的一个是最近的,但与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"