Portál AbcLinuxu, 26. dubna 2024 08:22


Dotaz: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.

18.2.2013 13:39 Vávra.V
BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.
Přečteno: 282×
Odpovědět | Admin
Dobrý den, poradíl by někdo jak můžu v bashi zjistit jestli proměnná obsahuje pouze jednu tečku? Děkuji za pomoc

V.V.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.2.2013 14:12 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.
Odpovědět | | Sbalit | Link | Blokovat | Admin

Budeme-li předpokládat, že "pouze jednu" znamená "právě jednu", tak třeba

if [ "${a//[!.]/}" = "." ]; then
    ...
fi

Pokud to má znamenat "nejvýše jednu", tak např.

if [ "${a%.*}" = "${a%%.*}" ]; then
    ...
fi
18.2.2013 14:34 Vávra.V
Rozbalit Rozbalit vše Re: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.

Budeme-li předpokládat, že "pouze jednu" znamená "právě jednu", tak třeba

Pokud to má znamenat "nejvýše jednu", tak např.

UF, absolutně nevím co jste tím myslel, teď jste mě dostal :D :D :D

Potřebuji podmínku, která zjistí jestlí nějaká proměnná obsahuje pouze jednu jedinou tečku ;)
18.2.2013 14:38 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.
"Právě jednu" znamená "počet teček je roven jedné". "Nejvýše jednu" znamená "počet teček je menší nebo roven jedné". Co z toho jste myslel výrazem "pouze jednu", nevím, tak jsem napsal řešení pro obě varianty.
18.2.2013 14:39 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.
"Pouze jednu" se nejvíc blíží "právě jednu", ale když to takto zdůrazníte tak to trochu evokuje i:
[[ "$promenna" == "." ]] && echo "Proměnná promenná obsahuje pouze jednu jedinou tečku a njic víc?"
:D
18.2.2013 14:47 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.
Mně to zase případalo jako "s jistotou vím, že tam aspoň jedna je, a chci ověřit, jestli jich není víc", pak by bylo jedno, která z variant zadání se vezme - tedy aspoň do chvíle, než by nějaký zákeřný uživatel vytvořil soubor bez tečky v názvu. :-)
18.2.2013 15:06 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.
Ano původní dotaz jsem také tak pochopil.
18.2.2013 14:26 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Např. pomocí regexp, ale pozor na verzi Bash, pod kterou chete aby to chodilo, pro ty novější verze:
[[ $promenna =~  ^[^.]*\.[^.]*$  ]] && echo "Proměnná $promenna obsahuje právě jednu tečku."
Pro starší verze či jiné shelly třeba:
echo $promenna | grep -q "^[^.]*\.[^.]*$"
[[ $? -eq 0 ]] && echo "Proměnná $promenna obsahuje právě jednu tečku."
Nebo pokud vám stačí poznat, že proměnná obsohuje nejvýše jednu tečku (tedy jednu nebo žádnou) tak třeba takto:
[[ ${promenna#*.} == ${promenna##*.} ]] && echo "Promenna $promenna není vícetečková."
Asi by to šlo i nějak jednoduššeji.
18.2.2013 14:28 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.
Ano z Michalova přispěvku vidím, že to jde jednoduššeji negací [!.] :)
18.2.2013 16:46 Vávra.V
Rozbalit Rozbalit vše Re: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Díky všem za pomoc, musím to pořádně nastudovat ;) Není nad praktické příklady :-(

BTW: a kdybych potřeboval v budoucnu zjistit jestli proměnná neobsahuje žádnou tečku? Jak by to šlo jednoduše zjistit. Děkuji
18.2.2013 17:52 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: BASH - Jak zjistit jestli obsahuje proměnná jen jednu tečku.
[[ $a != *.* ]]
If you hold a Unix shell up to your ear, you can you hear the C.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.