use*_*382 6 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
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这会打印出SYSENV01然后将2条空行打印到命令行 - 所以它必须匹配; 但是,小组没有出现.
有任何想法吗?这让我圈了很多年.
我同意评论者的观点...这可能是本地 shell 问题。这是我在本地得到的:
\n\n测试文件
\n\n#!/bin/bash\nif [[ "SYSENV01" =~ ^(SYS)(ENV)(01)$ ]]; then\n echo ${BASH_REMATCH[0]} \n echo ${BASH_REMATCH[1]}\n echo ${BASH_REMATCH[2]}\nfi\nRun Code Online (Sandbox Code Playgroud)\n\n输出:
\n\n~/tmp \xe2\x80\xba sh ./test.sh\nSYSENV01\nSYS\nENV\nRun Code Online (Sandbox Code Playgroud)\n\nBash 版本信息:
\n\n~/tmp \xe2\x80\xba bash --version\nGNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)\nCopyright (C) 2007 Free Software Foundation, Inc.\nRun Code Online (Sandbox Code Playgroud)\n\n效率不高,但使用以下命令可以实现相同的效果cut:
FIRST=$(echo "SYSENV01" | cut -c1-3 )\nSECOND=$(echo "SYSENV01" | cut -c4-6 )\nTHIRD=$(echo "SYSENV01" | cut -c7- )\n\necho $FIRST\necho $SECOND\necho $THIRD\nRun Code Online (Sandbox Code Playgroud)\n\n也许你可以用类似的东西代替?
\n