RE: porovnání v .sh skriptu

Jan Pechanec jp at devnull.cz
Sun Oct 31 19:47:13 CET 2004


On Sun, 31 Oct 2004, Cizek Milan wrote:

>> Momentalne nejsem u pocitace, ale osvedcilo se mi projistotu 
>> vse uzavirat do uvozovek. A taky obcas pomaha sh -x 
>> jmenoscriptu(ukaze to, co se vsechno deje,hlavne hodnoty 
>> promenych). A co je promenna time? Nema to byt hour?
>
>Ahoj a diky. Uz jsem byl z toho tak zblblej, ze jsem tu hour proste nevidel.
>Jinak mi to chodi i bez uvozovek.

	kolega Michal Hrusecky to spis myslel tak, ze kdyz to das do 
uvozovek, tak te zniceho nic urcite neprekvapi tento kod:

[ -ge 8 -a -lt 22 ]

	jehoz chybova hlaska je vic krypticka ([: -ge: unexpected operator) 
nez kdyz se ti tam objevi:

[ "" -ge 8 -a "" -lt 22 ]

	kde error hlaska je uz o neco lepsi ([: : bad number, v bashi pak 
-su: [: : integer expression expected). I kdyz i pak te treba muze na 4.x 
prekvapit chybka v jedne knihovni funkci (to uz je spis poznamka mimo, ale 
nedavno me to slusne dostalo - pomoci podobne konstrukce jsem testoval zda 
levy operand je nebo neni cislo):

sh -c '[ "" -eq 0 ]; [ $? -eq 2 ] && echo "not a number" || echo "number"'


	Kazdopadne pri nenumerickych testech je pouzivani quotingu uz vic 
duvodnejsi, tam je porovnani prazdneho stringu korektni. Jiny zpusob, ktery 
se obcas da videt, je tento:

[ x$hour = x12 ]

	driv jsem uvozovky ne vzdy pouzival (,,cha, vim presne jak to 
funguje, uvozovky jsou zbytecny''). Bohuzel v te funkci o 300 radek jinde, 
kde jsem vytvarel tu porovnavanou hodnotu, jsem zapomnel napsat komentar 
,,bacha, o 300 radek dole jsem hrdej, takze si dej pozor, at to misto cisla 
fakt neni prazdnej retezec''). Proste je dobry se chranit i pred sebou, 
vsechny dny se zrovna nedari. Taky ne vzdy vis, jestli ti tam do tech 
rezetezcu nejakej mimon neda treba ';' nebo '('.

	p.
	


-- 
Jan Pechanec <jp (at) devnull (dot) cz>



More information about the Users-l mailing list