我正在尝试在我的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条空行打印到命令行 - 所以它必须匹配;但是,小组没有出现。
有什么想法吗?这让我圈了很多年。
答案 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
也许你可以使用类似的东西?