Aar*_*ush 21 windows bash msysgit
我正在尝试bash_profile为msysgit添加一个函数:
function git-unpushed {
brinfo=$(git branch -v | grep git-branch-name)
if [[ $brinfo =~ ("[ahead "([[:digit:]]*)]) ]]
then
echo "(${BASH_REMATCH[2]})"
fi
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
bash:条件二元运算符expected`
bash:语法错误附近
=~'
从我能找到的,"equals tilde"operator(=~)在bash中评估为正则表达式.
为什么会=~抛出错误?
更新:这是手动输入它的截图(这是运行sh.exe):

Luk*_*ski 26
从Windows上的Git安装我在Bash 3.1.0上遇到了同样的错误.最终我改为:
if echo $var | grep -E 'regexp' > /dev/null
then
...
fi
Run Code Online (Sandbox Code Playgroud)
Eri*_*ris 13
根据https://groups.google.com/forum/#!topic/msysgit/yPh85MPDyfE,这是因为msys没有随bash一起发布libregex.据说如果你编译/找到一个msys构建的libregex,并把它放在库路径中,=~开始工作正常.
2015年更新:msysgit现已过时.
你应该使用git-for-windows附带的bash .
正如在这个答案中提到的,它使用了更新的bash(4.3+),=~语法将起作用.
原始答案(2013年3月)
使用msysgit打包的bash可能太旧而无法完全支持此运算符.
这当然太老了与不带引号的正则表达式进行比较,如" Bash,版本3 "和" 如何在bash脚本中使用正则表达式? "中所述:
从Bash版本3.2开始,表达式不再引用匹配.
实际上,mklement0在评论中提到:
=~在bash 3.0中引入并始终支持RHS上的未加引号的标记.
高达3.1.x,引用的令牌被视为与未引用的令牌相同:两者都被解释为正则表达式.
3.2中的变化是引用的令牌(或令牌的引用子串)现在被视为文字.
但我尝试使用引号(在最新的msysgit 1.8.1.2中),它仍然失败:
vonc@voncvb /
$ /bin/bash --version
GNU bash, version 3.1.0(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
vonc@voncvb /
$ variable="This is a fine mess."
vonc@voncvb /
$ echo "$variable"
This is a fine mess.
vonc@voncvb /
$ if [[ "$variable" =~ T.........fin*es* ]] ; then echo "ok" ; fi
bash: conditional binary operator expected
bash: syntax error near `=~'
vonc@voncvb /
$ if [[ "$variable" =~ "T.........fin*es*" ]] ; then echo "ok" ; fi
bash: conditional binary operator expected
bash: syntax error near `=~'
vonc@voncvb /
Run Code Online (Sandbox Code Playgroud)