小编Ale*_*lea的帖子

BASH_REMATCH 空

我正在尝试捕获 Bash 中的一些输入正则表达式,但 BASH_REMATCH 为空

#!/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"
Run Code Online (Sandbox Code Playgroud)

我的输入是:

    MailAccountFetch                         2017-03-29 19:00:00  Success      5.0 Second(s)      2017-03-29 19:03:00
Run Code Online (Sandbox Code Playgroud)

通过调试脚本(VS Code+Bash ext),我可以看到当代码进入 IF 内部时 INPUT 字符串匹配,但 BASH_REMATCH 并未填充我的两个捕获组。

我上线了:

GNU bash, version 4.4.0(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?

稍后编辑


接受的答案

接受最具解释性的答案。

最终解决了这个问题:

bashdb/VS Code 环境导致空 BASH_REMATCH。该代码单独运行时工作正常。

regex bash shell trepan

5
推荐指数
1
解决办法
6431
查看次数

标签 统计

bash ×1

regex ×1

shell ×1

trepan ×1