Bash中的重复序列

时间:2013-04-10 13:13:38

标签: bash sequence

我在我的bash脚本中遇到了一些问题,我有一个由20 s的重复序列组成的字符串,例如202020,可能会有更多或更少20个,例如20202020202020,我想创建一个if条件,如果在内部找到任何奇怪的数字,例如30中的20203020会出错。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

这应该做测试:

[[ "$var" =~ "^(20)+$" ]]

检查一下:

kent$  [[ "202" =~ "^(20)+$" ]] && echo "y" || echo "n"                                                                                                                     
n

kent$  [[ "20203" =~ "^(20)+$" ]] && echo "y" || echo "n"
n

kent$  [[ "20202002" =~ "^(20)+$" ]] && echo "y" || echo "n"                                                                                                                
n

kent$  [[ "20202020" =~ "^(20)+$" ]] && echo "y" || echo "n"                                                                                                                
y

答案 1 :(得分:0)

这个例子怎么样,你能用吗?

if [ "`echo "202020302020" | sed -e 's/20//g'`"  ]; 
then echo "there is something"; 
fi

答案 2 :(得分:0)

扩展模式比正则表达式更紧凑。

shopt -s extglob
if [[ $str = +(20) ]]; then
   echo "twenties"
else
   echo "mismatch"
fi

在某些时候,bash更改为将[[...]]表达式中的所有模式视为扩展模式,因此可能不需要shopt命令。