Portál AbcLinuxu, 19. prosince 2025 13:12
if [[ "retazec" =~ ^[a-z0-9]*$ ]]
then
echo "retazec je OK"
fi
if [[ "retazec" =~ '^[a-z0-9]*$' ]]paranoi není nikdy dost.
Navíc neexistuje způsob, jak zapsat totéž pomocí test, takže jsme se opět syntakticky přiblížili perlu :(
Jste si jistý, že neexistuje? Co třeba
if [ -z "${str//[[:alnum:]]}" ]; then
...
fi
Mimochodem, "[0-9a-z]" u mne v locale cs_CZ.UTF-8 zahrnuje všechna malá i velká písmena kromě ž, Z a Ž. Pochybuji, že to je to, co měl tazatel na mysli.
[a-z] také - tedy aspoň většinu z nich.
[:lower:] zahrnuje i ty háčkované a čárkované, kroužkované nevyjímaje, a to jsem zatím jen u češtiny či slovenčtiny, takže si ještě račme přenastaviti locale
if grep -q "^[[:lower:][:digit:]]*$" <<<"123abc"; then echo "ok..." fiA v tom
[[ ]] nemusíte dávat do uvozovek ani ten $retezec, když jsme u toho, takže ano, při porovnávání s test lze očekávat spíš odlišnosti než podobnosti.
Ono je vůbec otázka proč to psát pomocí test, když stačí grep
Příkaz test je v bashi builtin, grep ne. Tedy aspoň zatím ne. :-)
retezec="abcdefghijklmnoprstvwxyz0123456789"
LC_ALL=C
if [[ $retazec =~ ^[[:lower:][:digit:]]*$ ]]
then
echo "retazec je OK"
fi
a případně vrátit locale zpět.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.