我正在尝试制作一个程序,读取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