Jak używać wyrażeń regularnych w skryptach bash?

Chcę sprawdzić, czy zmienna ma ważny rok używając wyrażenia regularnego. Czytając Podręcznik bash rozumiem, że mógłbym użyć operatora = ~

Patrząc na poniższy przykład, spodziewałbym się zobaczyć "nie OK", ale widzę "OK". Co robię źle?

i="test"
if [ $i=~"200[78]" ]
then
  echo "OK"
else
  echo "not OK"
fi
Author: Hamish Downer, 2008-11-20

2 answers

Zostało zmienione między 3.1 A 3.2:

Jest to zwięzły opis nowych funkcji dodanych do bash-3.2 od wydania bash-3.1.

Cytowanie argumentu string do operatora [[command ' s =~ wymusza teraz dopasowanie łańcuchów, tak jak w przypadku innych operatorów pasujących do wzorców.

Więc użyj go bez cudzysłowów tak:

i="test"
if [[ $i =~ 200[78] ]] ; then
    echo "OK"
else
    echo "not OK"
fi
 116
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Potrzebujesz spacji wokół operatora = ~

i="test"
if [[ $i =~ "200[78]" ]];
then
  echo "OK"
else
  echo "not OK"
fi
 8
Author: michiel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-24 00:54:58