Práce s proměnnými - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Jaký fotograf/ka získal/a cenu za nejpopulárnější příspěvek v Nikon Photo Contest?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

Práce s proměnnými

28. května 2002, 00.00 | Proměnné shellu na rozdíl od běžných proměnných programovacích jazyků nabízejí velmi bohatou paletu služeb: můžeme si např. od proměnné, která obsahuje jméno souboru, přímo vyžádat příponu nebo naopak jméno bez přípony

Proměnné shellu na rozdíl od běžných proměnných programovacích jazyků nabízejí velmi bohatou paletu služeb: můžeme si např. od proměnné, která obsahuje jméno souboru, přímo vyžádat příponu nebo naopak jméno bez přípony.

Ačkoli se ani zdaleka nebudeme zabývat všemi možnostmi, jež zsh nabízí, ukážeme si dnes alespoň ty nejdůležitější.

Nejdřív restík z minula...

Minule jsme si uvedli jednoduchý příklad skriptu, který spoléhá na to, že všechny proměnné jsou neinicializované:

 #!/bin/zsh
 # opsat vsechny argumenty na std.vystup
 echo $((i)): $0
 for ii in $*; echo $((++i)): $ii

Pozorní čtenáři jistě hned sami pochopili, že dvojité závorky kolem i v příkazu echo $((i)): $0 jsou proto, aby se obsah neinicializované — ej, prázdné — proměnné vypsal jako "0". Kdybychom je nepoužili, vypsal by se jako "" (prázdný řetězec).

Alternativní zápis proměnných

Až dosud jsme pro získání obsahu proměnné před její název prostě přidali znak "$". Shell ovšem umožňuje i alternativní zápis: název proměnné může být zapsán do složených závorek, takže $i je to samé, jako ${i}.

Výhoda se projeví ve chvíli, kdy chceme zřetězit obsah proměnné s nějakým textem:

 309 /tmp> x=ahoj     
 310 /tmp> echo ${x}da
 ahojda
 311 /tmp>

Navíc je to velmi šikovné, chceme-li k proměnné přidávat nejrůznější přepínače — například ty, jež si za chvilku ukážeme, a jež se za jméno proměnné připojují za dvojtečku.

Stojí za to zdůraznit, že ani pro ně nejsou složené závorky povinné; s nimi však je obvykle skript mnohem přehlednější.

Standardní hodnota

Velmi často se hodí standardní hodnota proměnné, tj. něco jako "pokud proměnná 'x' obsahuje nějaký text, použij jej; jinak použij text 'foobar'". Zsh to umožňuje takto:

 312 /tmp> echo ${x:-nazdar}
 ahoj
 313 /tmp> echo ${y:-nazdar}
 nazdar
 314 /tmp> 

Převody na malá/velká písmena

Podrobný popis není třeba, stačí jednoduchý příklad:

 322 /tmp> x="Matous Marek Lukas Jan"
 323 /tmp> echo $x:l                 
 matous marek lukas jan
 324 /tmp> echo $x:u
 MATOUS MAREK LUKAS JAN
 325 /tmp> 

Záměny textu

Přímo uvnitř proměnných lze provádět záměny textu; odpovídající přepínač se trochu podobá příkazu s dávkového editoru sed. Rozdíly jsou v tom, že zde nemůžeme používat regulární výrazy (ale jen prosté textové řetězce), a že případný přepínač g (pro "všechny záměny v řetězci") se píše ještě před s:

 325 /tmp> echo $x:s/a/@  
 M@tous Marek Lukas Jan
 326 /tmp> echo $x:gs/a/@
 M@tous M@rek Luk@s J@n
 327 /tmp> echo ${x:gs/ /, }
 Matous, Marek, Lukas, Jan
 328 /tmp> 

U složitějších záměn můžeme s výhodou využít toho, že zsh si pamatuje naposledy provedenou substituci, a provede ji znovu je-li o to požádán přepínačem "&":

 328 /tmp> echo ${x:&}      
 Matous, Marek Lukas Jan
 329 /tmp> y="a b c d" 
 330 /tmp> echo ${y:&} 
 a, b c d
 331 /tmp> echo ${y:g&}
 a, b, c, d
 331 /tmp> 

To zdaleka není všechno...

...příště si ukážeme několik velmi šikovných přepínačů, speciálně uzpůsobených pro práci se jmény souborů.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

Poslat článek

Nyní máte možnost poslat odkaz článku svým přátelům:

Váš e-mail:

(Není povinný)

E-mail adresáta:

Odkaz článku:

Vzkaz:

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: