Bash正则表达式 - 用于转义的不同数量的反斜杠?

时间:2014-05-28 12:16:53

标签: regex bash escaping

最近我用这样的正则表达式测试编写了一个脚本:

# Works fine on Sabayon/Mac, doesn't work on CentOS
[[ $line =~ (.+)\{(.+)\} ]] || continue

它在Sabayon Linux和Mac上运行顺利,但后来我需要在其他环境中运行它并且脚本失败了。这是CentOS Linux。经过一段时间后我发现我需要进行双重反冲才能使其正常工作。

# Works fine on CentOS, does not on Sabayon/Mac
[[ $line =~ (.+)\\{(.+)\\} ]] || continue

环境清单:

  • CentOS版本5.5(最终版),2.6.18-194.el5,运行GNU bash,版本3.2.25(1)-release(x86_64-redhat-linux-gnu)
  • Sabayon最新版本,3.12.0-sabayon,运行GNU bash,版本4.2.45(1)-release(x86_64-pc-linux-gnu)
  • OS X 10.9.3,运行GNU bash,版本3.2.51(1)-release(x86_64-apple-darwin13)

为什么会这样?如何让它在两种环境下运行?

1 个答案:

答案 0 :(得分:1)

您可以将表达式存储在变量中并在测试中使用它:

re="(.+)\{(.+)\}"
[[ $line =~ $re ]] || continue

我认为你真的不需要括号。 ".+\{.+\}"也可以。