【发布时间】:2014-01-01 13:54:03
【问题描述】:
我正在尝试在我的 bash 脚本中进行模式匹配,但由于某种原因,我的组没有设置 BASH_REMATCH 变量。
代码如下:
if [[ "SYSENV01" =~ ^(SYS)(ENV)(01)$ ]]; then
echo ${BASH_REMATCH[0]}
echo ${BASH_REMATCH[1]}
echo ${BASH_REMATCH[2]}
fi
奇怪的是,这会打印出 SYSENV01,然后是 2 个空行到命令行 - 所以它必须是匹配的;但是,这些组没有出现。
有什么想法吗?这让我在圈子里转了好久。
【问题讨论】:
-
您使用的是什么版本的 bash?该代码在 bash 4.2.45 中运行良好
-
Bash 版本:GNU bash,版本 4.1.7(1)-release (ia64-hp-hpux11.31)
-
确保您使用的是 bash(可使用
#!/bin/bash执行)或使用bash filename运行它。否则它可能正在使用另一个解释器(这不适用于zsh或dash) -
是的 - 在我的文件顶部得到了它,当我从 bash shell 尝试时它仍然不起作用。即[[ "SYSENV01" =~ ^(SYS)(ENV)(01)$ ]] && echo ${BASH_REMATCH[1]} - 但是 BASH_REMATCH[0] 有效
-
@user2294382 你确定你使用的是 bash 吗?
echo $SHELL说什么?
标签: regex bash shell scripting