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 /