Bash正则表达式组不起作用

时间:2013-12-13 17:33:01

标签: regex bash shell scripting

我正在尝试在我的bash脚本中模式匹配,但出于某种原因,BASH_REMATCH var未使用我的组进行设置。

以下代码:

if [[ "SYSENV01" =~ ^(SYS)(ENV)(01)$ ]]; then
    echo ${BASH_REMATCH[0]}        
    echo ${BASH_REMATCH[1]}
    echo ${BASH_REMATCH[2]}
fi

奇怪的是,这会打印出SYSENV01然后将2条空行打印到命令行 - 所以它必须匹配;但是,小组没有出现。

有什么想法吗?这让我圈了很多年。

1 个答案:

答案 0 :(得分:1)

我同意评论者的意见......这可能是本地的shell问题。这是我在当地得到的:

<强> test.sh

#!/bin/bash
if [[ "SYSENV01" =~ ^(SYS)(ENV)(01)$ ]]; then
    echo ${BASH_REMATCH[0]}        
    echo ${BASH_REMATCH[1]}
    echo ${BASH_REMATCH[2]}
fi

输出:

~/tmp › sh ./test.sh
SYSENV01
SYS
ENV

Bash版本信息:

~/tmp › bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

效率不高,但使用cut时也是如此:

FIRST=$(echo "SYSENV01"  | cut -c1-3 )
SECOND=$(echo "SYSENV01" | cut -c4-6 )
THIRD=$(echo "SYSENV01"  | cut -c7- )

echo $FIRST
echo $SECOND
echo $THIRD

也许你可以使用类似的东西?