Portál AbcLinuxu, 10. května 2025 22:48
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" fia případně vrátit locale zpět.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.