我有以下案例:
regex: $'\[OK\][[:space:]]+([[:alnum:]_]+)\.([[:alnum:]_]+)([^[]*)'
text:
[OK] AAA.BBBBBB
aaabbbcccdddfffed
asdadadadadadsada
[OK] CCC.KKKKKKK
some text here
[OK] OKO.II
如果我正在使用这个网站https://regex101.com/r/qw4B5O/1 https://regex101.com/r/qw4B5O/1看起来像这样:
现在...如果我有以下代码:
var_test=()
while [[ $text =~ $regex ]]; do
var_test+=("${BASH_REMATCH[@]:1}")
text=${text#*"${BASH_REMATCH[0]}"}
done
declare -p var_test
我将得到正确的输出:
declare -a var_test=([0]="AAA" [1]="BBBBBB" [2]=$'\naaabbbcccdddfffed\nasdadadadadadsada\n' [3]="CCC" [4]="KKKKKKK" [5]=$'\nsome text here\n' [6]="OKO" [7]="II" [8]="")
但是一旦我将它转换成这样的函数:
function split_by_regex {
regex=$1
text=$2
groups=()
while [[ $text =~ $regex ]]; do
groups+=("${BASH_REMATCH[@]:1}")
text=${text#*"${BASH_REMATCH[0]}"}
done
echo "${groups[@]}"
}
res=($(split_by_regex "$regex" "$text"))
declare -p res
我会得到错误的输出:
declare -a res=([0]="AAA" [1]="BBBBBB" [2]="aaabbbcccdddfffed" [3]="asdadadadadadsada" [4]="CCC" [5]="KKKKKKK" [6]="some" [7]="text" [8]="here" [9]="OKO" [10]="II")
经过一番调试后,错误看起来像是来自echo "${groups[@]}"
因为如果我会检查groups
在函数中它看起来应该是这样,但是当我从函数中得到结果后却不是这样。
抱歉,如果这是一个显而易见的问题,但我是 bash 和 shell 脚本的新手,我正在尝试找出答案。