我在我的 bash 脚本中遇到了一些问题,我有一个字符串,它由重复的20
s 序列组成,例如202020
,可能有更多或更少20
的 s,例如2020
或2020202020
,我想创建一个 if 条件,如果找到任何奇怪的数字在里面,例如30
in 20203020
,给出一个错误。
有任何想法吗?
这应该做测试:
[[ "$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
这个例子怎么样,你能用吗?
if [ "`echo "202020302020" | sed -e 's/20//g'`" ];
then echo "there is something";
fi
扩展模式比正则表达式更紧凑一点。
shopt -s extglob
if [[ $str = +(20) ]]; then
echo "twenties"
else
echo "mismatch"
fi
在某些时候,bash
更改为将[[...]]
表达式中的所有模式视为扩展模式,因此该shopt
命令可能不是必需的。