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
83
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
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
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