bash read a if
Jan Kasprzak
kas na fi.muni.cz
Čtvrtek Březen 24 10:42:09 CET 2005
Kilian Igor wrote:
: ked on nema co porovnat (jedna strana je na ....).
: preto tam treba dat este jeden znak, aby tam vzdy
: nieco bolo. Napr. pridat znak a. Vyzeralo by to nasledovne:
: if [ $REPLY"a" == "aa" ] || [ $REPLY"a" == "Aa" ]; then echo $REPLY; fi
Tohle je spatne. Spravny kod by mel vypadat nejak takto:
read
if [ "X$REPLY" = Xa ] || [ "X$REPLY" = XA ]
then echo "$REPLY"
fi
Ve Vasem reseni -- $REPLY"a" nicemu nepomuze. Jednak musi byt v uvozovkach
cele $REPLY (predstavte si, ze bych jako odpoved vlozil "1 2" - shell
by nadaval, ze za tou jednickoum potrebuje operator a ne dvojku), a jednak
kdyz uz tam chcete pridavat nejaky znak, tak ho pridavejte na zacatek
a ne na konec. Ten pridany znak ("X" v mem pripade) ma ten duvod,
ze kdyz jako odpoved vlozite treba retezec "-f", tak bez toho X by
to "-f" bylo povazovano za operator, cili v tomto pripade test na existenci
souboru. A zase by test nadaval, ze ocekava jen jedno jmeno souboru,
a ne dva retezce - "==" a "aa". Navic jsem se dival, ze program test/[
dokonce ani operator "==" nezna, v dokumentaci je jen "=". To je asi
nejake bashove specifikum - doporucuji nepouzivat.
Kazdopadne je dobre si zvyknout ze kdekoliv pisete $neco v shellu, je treba
to dat do uvozovek. Pouze pokud chcete dosahnout nejakeho specialniho
efektu, lze uvazovat o vyhodnoceni promenne bez uvozovek.
-Y.
--
| Jan "Yenya" Kasprzak <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839 Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/ Czech Linux Homepage: http://www.linux.cz/ |
> Whatever the Java applications and desktop dances may lead to, Unix will <
> still be pushing the packets around for a quite a while. --Rob Pike <
Další informace o konferenci Linux