bash 3.2正则表达式模式在使用=〜时不匹配

时间:2013-03-06 17:15:25

标签: regex bash

我正在尝试在bash脚本中匹配一个简单的正则表达式。它的行为符合预期的 GNU bash,版本4.2.24(1) - release(x86_64-pc-linux-gnu)但不适用于 GNU bash,版本3.2.25(1) -release(x86_64-redhat-linux-gnu)

这是代码:


#!/bin/bash

line="[foo]"
[[ $line =~ ^\[.*\]$ ]] && echo "regex matched"
echo "value of \$? : " $?
echo "value of BASH_REMATCH : " $BASH_REMATCH
/bin/bash --version|grep "GNU bash"

这是输出 GNU bash,版本4.2.24(1)-release(x86_64-pc-linux-gnu)

正则表达式匹配
$的价值? :0
BASH_REMATCH的值:[foo]
GNU bash,版本4.2.24(1) - release(x86_64-pc-linux-gnu)

这是输出 GNU bash,版本3.2.25(1)-release(x86_64-redhat-linux-gnu)

$的价值? :1
BASH_REMATCH的值:
GNU bash,版本3.2.25(1)-release(x86_64-redhat-linux-gnu)

我在这里和其他地方看过很多关于 =〜中的oparator行为的帖子,我找不到任何有同样问题的人。我看到bash 3.2发生了重大变化,但据我所知它应该从3.2开始工作。

1 个答案:

答案 0 :(得分:2)

看起来像某种形式的逃避问题。

这适用于此处(bash版本3.2.25(1)-release):

line="[foo]"
bar="^\[.*\]$"
[[ $line =~ $bar ]] && echo "regex matched"

这似乎也有效:

[[ $line =~ ^\\[.*\\]$ ]] && echo "regex matched"