我正在尝试在 Bash 中捕获一些输入正则表达式,但 BASH_REMATCH 为 EMPTY
#!/usr/bin/env /bin/bash
INPUT=$(cat input.txt)
TASK_NAME="MailAccountFetch"
MATCH_PATTERN="(${TASK_NAME})\s+([0-9]{4}-[0-9]{2}-[0-9]{2}\s[0-9]{2}:[0-9]{2}:[0-9]{2})"
while read -r line; do
if [[ $line =~ $MATCH_PATTERN ]]; then
TASK_RESULT=${BASH_REMATCH[3]}
TASK_LAST_RUN=${BASH_REMATCH[2]}
TASK_EXECUTION_DURATION=${BASH_REMATCH[4]}
fi
done <<< "$INPUT"
我的输入是:
MailAccountFetch 2017-03-29 19:00:00 Success 5.0 Second(s) 2017-03-29 19:03:00
通过调试脚本(VS Code+Bash ext),我可以看到 INPUT 字符串匹配,因为代码进入 IF 但 BASH_REMATCH 没有填充我的两个捕获组。
我上线了:
GNU bash, version 4.4.0(1)-release (x86_64-pc-linux-gnu)
可能是什么问题?
稍后编辑
接受的答案
接受最具解释性的答案。
什么最终解决了这个问题:
bashdb/VS 代码环境导致空 BASH_REMATCH。该代码单独运行时可以正常工作。