Как использовать регулярные выражения в сценариях bash?
Я хочу проверить, имеет ли переменная допустимый год, используя регулярное выражение. Чтение руководства bash Я понимаю, что я мог бы использовать оператор = ~
Глядя на пример ниже, я ожидаю увидеть "не в порядке", но я вижу "ОК". Что я делаю неправильно?
i="test"
if [ $i=~"200[78]" ]
then
echo "OK"
else
echo "not OK"
fi
Ответы
Ответ 1
Было изменено между 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
Ответ 2
Вам нужны пробелы вокруг оператора = ~
i="test"
if [[ $i =~ "200[78]" ]];
then
echo "OK"
else
echo "not OK"
fi