Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash regex-不同数量的反斜杠用于转义?_Regex_Bash_Escaping - Fatal编程技术网

Bash regex-不同数量的反斜杠用于转义?

Bash regex-不同数量的反斜杠用于转义?,regex,bash,escaping,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

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

# 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)-发行版(x86_64-redhat-linux-GNU)
  • Sabayon最新版本,3.12.0-Sabayon,运行GNU bash,版本4.2.45(1)-发行版(x86_64-pc-linux-GNU)
  • OS X 10.9.3,运行GNU bash,版本3.2.51(1)-发行版(x86_64-apple-darwin13)

为什么会这样?如何使其在两种环境中运行?

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

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

我不认为你真的需要括号<代码>“+\{.+\}”也能用。

我没有可以测试的Mac电脑,你能试试吗:
[$line=~(.+)[{](.+)[}]]]
在CentOS上运行得很好。很奇怪,差异是在3.2的两个版本之间,而不是在3.2和4.2之间。我怀疑3.2.25和3.2.51之间修复了一个bug。我忘了说,但我需要捕获组,所以需要括号。您的解决方案运行良好,但上面由scragar撰写的评论中的解决方案也运行良好。谢谢你们,伙计们。