if [[ "$len" -lt "$MINLEN" && "$line" =~ \[*\.\] ]]
这是来自Advanced bash脚本指南“例10-1。在文本文件的段落之间插入一个空行”
据我所知,这匹配“任何字符串或点字符”。对吗?
答案 0 :(得分:4)
它匹配零个或多个左括号字符(\[*
),后跟句点和方括号(\.\]
)。请注意,它只需要在“$ line”中的某处存在匹配,而不是整个字符串匹配。这是一个演示:
$ showmatch() { [[ "$1" =~ \[*\.\] ]] && echo "matched: '${BASH_REMATCH[0]}'" || echo "no match"; }
$ showmatch "abc[.]def"
matched: '[.]'
$ showmatch "abc.]def"
matched: '.]'
$ showmatch "abc[[[[[[[.]def"
matched: '[[[[[[[.]'
$ showmatch "abc[[[[[[[xyz.]def"
matched: '.]'
$ showmatch "abc[[[[[[[.xyz]def"
no match
...而且我很确定这不是它在该示例脚本中应该做的事情。
答案 1 :(得分:2)
这意味着任何字符串以括号内的点结尾,例如:
[.]
[abc.]
答案 2 :(得分:0)
更新:给Gordon Davisson +1,他总结得很好......所以我已经修改了我原来的帖子
简而言之:您可以像这样测试bash正则表达式匹配的结果:
[[ "[*.]" =~ \[*\.\] ]] ; echo ${BASH_REMATCH[0]}