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