2

我正在尝试在 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)的输出

$的正则表达式匹配
值?:BASH_REMATCH 的 0
值:[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)的输出

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

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

4

1 回答 1

2

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

这在这里有效(bash 版本3.2.25(1)-release):

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

这似乎也有效:

[[ $line =~ ^\\[.*\\]$ ]] && echo "regex matched"
于 2013-03-06T17:23:34.113 回答