这个 BASH 正则表达式脚本有什么错误?

What's the error with this BASH regex script?

我正在尝试制作一个读取 n 字符串并检查它们是否属于正则表达式模式的程序:XXXXX1234X,其中 X 是大写字符,{1,2,3,4} 是任何数字。据我检查,正则表达式模式是正确的。问题好像出在字符串的输入和比较上

read n
i=0
declare -a str
while [ $i -lt $n ]
do
    read 'str[$i]'
    i=$((i+1))
done


i=0
while [ $i -lt $n ]
do

    [[ $(str[$i])  =~ ^([A-Z]){5}([0-9]){4}([A-Z]){1}$ ]] && echo YES || echo NO
    i=$((i+1))
done

我对你的代码做了一个小修改,我在正则表达式测试中用 { } 替换了 ()

[[ ${str[$i]}  =~ ^...

运行 一些测试并且有效:

#!/bin/bash
read n
i=0
declare -a str
while [ $i -lt $n ]
do
    read 'str[$i]'
    i=$((i+1))
done

i=0
while [ $i -lt $n ]
do
    [[ ${str[$i]}  =~ ^([A-Z]){5}([0-9]){4}([A-Z]){1}$ ]] && echo YES || echo NO
    i=$((i+1))
done