regex - 使用 =~ 时 bash 3.2 正则表达式模式不匹配

标签 regex bash

我正在尝试在 bash 脚本中匹配一个简单的正则表达式。它的行为与 GNU bash 版本 4.2.24(1)-release (x86_64-pc-linux-gnu) 的预期一致,但与 GNU bash 版本 3.2.25(1) 的行为不同-发布(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) 的输出

regex matched
value of $? : 0
value of BASH_REMATCH : [foo]
GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)

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

value of $? : 1
value of BASH_REMATCH :
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

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

最佳答案

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

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

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

这似乎也有效:

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

关于regex - 使用 =~ 时 bash 3.2 正则表达式模式不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253792/

相关文章:

linux - Bash 子 shell 使用父进程的标准输入

PHP - 删除重复的音节词

javascript - 将 native 正则表达式转换为带有变量的 RegExp 对象时出错

java - java中中文数字的正则表达式

python - 使用正则表达式将字符串插入文件路径字典中

linux - Live Linux grep 脚本 - 只打印肯定的结果

linux - 有人可以提供 "lsof"命令的替代方法吗

python - 递归遍历目录并替换函数调用

c# - 正则表达式 - 电话号码(包括+,(,)和长度验证 - C#

python - Spark 读取文件不包含模式