regex - условия - регулярные выражения шпаргалка




Как использовать регулярные выражения в сценариях bash? (2)

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

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

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

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

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

Он был изменен между 3.1 и 3.2:

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

Цитирование аргумента строки для оператора [[command_ = ~] теперь приводит к сопоставлению строк, как и к другим операторам сопоставления шаблонов.

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

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




conditional