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



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

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

我对您的代码做了一个小修改,在regex测试中用{ }替换了()

[[ ${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

最新更新