2013-04-18 104 views
4

我可以用猛砸,如果我想要一个右方括号]被包括在该组来匹配一组字符正则表达式方闭括号

$ [[ a =~ [abc] ]]; echo $? 
0 

然而,它未能

$ [[ a =~ [abc\]] ]]; echo $? 
1 

$ [[ a =~ [abc\\]] ]]; echo $? 
1 

回答

9

从手册页regex(7)

To include a literal ']' in the list, make it the first character (fol- 
lowing a possible '^'). 

测试:

$ [[ "]" =~ []abc] ]]; echo $? 
0 
+0

这很有趣。为什么命令在一个字符类中是重要的? – David

+2

@大卫,以避免必须逃脱它。空字符类无效,因此在'[]'中,']'不能是字符类的结尾。因此可以将其视为文字字符。类似的东西用于连字符(通常创建范围,除非它们是第一个或最后一个字符)和插入符(除非它们不是第一个字符否定字符类)。 –