Я хочу проверить, есть ли у переменной действительный год, используя регулярное выражение. Читая руководство по bash, я понимаю, что могу использовать оператор = ~
Глядя на приведенный ниже пример, я ожидал увидеть «не в порядке», но вижу «нормально». Что я делаю не так?
i = "test"
if [ $i=~"200[78]" ]
then
echo "OK"
else
echo "not OK"
fi
Обратите внимание, что это не удалось из-за отсутствия пробелов вокруг =~.





Он был изменен между 3.1 и 3.2:
This is a terse description of the new features added to bash-3.2 since the release of bash-3.1.
Quoting the string argument to the [[ command's =~ operator now forces string matching, as with the other pattern-matching operators.
Так что используйте его без кавычек так:
i = "test"
if [[ $i =~ 200[78] ]] ; then
echo "OK"
else
echo "not OK"
fi
Как мне справиться с ситуацией, когда регулярное выражение содержит пробелы, если я не могу процитировать? Если регулярное выражение, например, a +b сообщит о синтаксической ошибке ...
@Alderath: используйте a\ \+b, чтобы убрать пробел и знак плюса.
Вам нужны пробелы вокруг оператора = ~
i = "test" if [[ $i =~ "200[78]" ]]; then echo "OK" else echo "not OK" fi
Ответ paxdiablo правильный, добавление пробелов здесь не помогает (теперь вы также получаете "not OK" для 2008, единственная строка, которая соответствует буквально "200 [78]").
возможный дубликат регулярное выражение bash с кавычками?