我在我的bash脚本中遇到了一些问题,我有一个由20
s的重复序列组成的字符串,例如202020
,可能会有更多或更少20
个,例如2020
或2020202020
,我想创建一个if条件,如果在内部找到任何奇怪的数字,例如30
中的20203020
会出错。
有什么想法吗?
答案 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
命令。