Как использовать регулярные выражения в скриптах bash? - PullRequest
81 голосов
/ 20 ноября 2008

Я хочу проверить, имеет ли переменная действительный год, используя регулярное выражение. Чтение руководства по bash Я понимаю, что могу использовать оператор = ~

Глядя на приведенный ниже пример, я ожидаю увидеть «не в порядке», но вижу «ОК». Что я делаю не так?

i="test"
if [ $i=~"200[78]" ]
then
  echo "OK"
else
  echo "not OK"
fi

Ответы [ 2 ]

115 голосов
/ 20 ноября 2008

Было изменено между 3,1 и 3,2:

Это краткое описание новых функций, добавленных в bash-3.2 с момента выпуска bash-3.1.

Заключение строкового аргумента в оператор [[command's = ~) теперь вызывает сопоставление строк, как и в случае других операторов сопоставления с образцом.

Так что используйте его без кавычек так:

i="test"
if [[ $i =~ 200[78] ]] ; then
    echo "OK"
else
    echo "not OK"
fi
8 голосов
/ 24 февраля 2010

Вам нужны пробелы вокруг оператора = ~

i="test"
if [[ $i =~ "200[78]" ]];
then
  echo "OK"
else
  echo "not OK"
fi
...