2013-04-10 2 views
1

Я застрял в чем-то в моем скрипте bash, у меня есть строка, которая состоит из повторяющейся последовательности 20 s, например. 202020, может быть более или менее 20 с, например. 2020 или 2020202020, я хочу создать условие if, которое, если найдет какое-либо странное число внутри, например. 30 в 20203020, дает ошибку.Повторяющаяся последовательность в Bash

Любые идеи?

ответ

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 
+0

Это именно то, что мне нужно, спасибо большое – SoCRaT

0

как об этом примере, вы можете использовать его?

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

Расширенные шаблоны являются чуть более компактными, чем обычные выражения.

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

В каком-то момент, bash изменился для лечения всех моделей в [[...]] выражениях как протяженные образцы, поэтому команда shopt не может быть необходимой.

Смежные вопросы