如何使用bash将提交消息解析为变量?

Jon*_*Sud 0 regex bash string-parsing

我使用 bash 并且我有字符串(提交消息)

:sparkles: feat(xxx): this is a commit
Run Code Online (Sandbox Code Playgroud)

我想把它分成变量部分:

emoji=:sparkles:
type=feat
scope=xxx
message=this is a commit
Run Code Online (Sandbox Code Playgroud)

我尝试使用 grep,但正则表达式没有返回我需要的内容(例如“类型”),无论如何如何将其粘贴到变量中?

echo ":sparkles: feat(xxx): this is a commit" | grep "[((.*))]"
Run Code Online (Sandbox Code Playgroud)

Cyr*_*rus 5

使用 bash 版本 >= 3,一个正则表达式和一个数组:

x=":sparkles: feat(xxx): this is a commit"

[[ "$x" =~ ^(:.*:)\ (.*)\((.*)\):\ (.*)$ ]]
echo "${BASH_REMATCH[1]}"
echo "${BASH_REMATCH[2]}"
echo "${BASH_REMATCH[3]}"
echo "${BASH_REMATCH[4]}"
Run Code Online (Sandbox Code Playgroud)

输出:

:火花:
壮举
xxx
这是一个提交

来自man bash

BASH_REMATCH: 一个数组变量,其成员由 =~ 二元运算符分配给 [[ 条件命令。索引为 0 的元素是与整个正则表达式匹配的字符串部分。索引为 n 的元素是与第 n 个带括号的子表达式匹配的字符串部分。该变量是只读的。