Další triky kolem polí... - 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

 

Kde se narodil známý fotograf František Drtikol?

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

Seriály

Více seriálů



Software

Další triky kolem polí...

13. června 2002, 00.00 | Dnes budeme pokračovat v ukázkách co všechno se dá v zsh dělat s poli.

Dnes budeme pokračovat v ukázkách co všechno se dá v zsh dělat s poli.

Získání všech prvků

V zsh máme dvě speciální hodnoty pro "všechny indexy": "*" a "@". Jejich chování se liší v případě, že je získání hodnoty proměnné uzavřeno do uvozovek: "*" prostě vrátí všechny hodnoty (a ty tak zůstanou v uvozovkách jako jeden dlouhý řetězec); "@" však "zauvozovkuje" každou hodnotu samostatně.

Protože příkaz echo uvozovky nevypisuje, použijeme starý známý skript pro zobrazení všech argumentů — ten samozřejmě a b c zobrazí jako tři argumenty na samostatných řádcích, zatímco "a b c" jako jediný argument na jediném řádku:

 438 /tmp> ./listargs a b c
 1: a
 2: b
 3: c
 439 /tmp> ./listargs "a b c"
 1: a b c
 440 /tmp> ./listargs "$x[*]"
 1: a dvojka c f
 441 /tmp> ./listargs "$x[@]"
 1: a
 2: dvojka
 3: c
 4: f
 442 /tmp> 

Stringy jsou pole znaků nebo slov!

Tedy, ve skutečnosti tomu tak samozřejmě není, ale zsh tak s nimi dokáže pracovat. Standardně je textový řetězec v operacích s indexy interpretován jako pole znaků:

 443 /tmp> x='Ahojky!'
 444 /tmp> echo $x[1,4]
 Ahoj
 445 /tmp> x[-3,-2]="da" 
 446 /tmp> echo $x
 Ahojda!
 447 /tmp> 

pomocí přepínače "w", zapsaného před (kterýmkoli) indexem, si můžeme vyžádat indexování po slovech:

 479 /tmp> x="Matous Marek Lukas Jan"
 480 /tmp> echo $x[2]                
 a
 481 /tmp> echo $x[(w)2]             
 Marek
 482 /tmp> x[(w)-1,(w)-2]=a          
 483 /tmp> echo $x                   
 Matous Marek Lukas a Jan
 484 /tmp> 

Indexování obsahem

Shell zsh nám dokonce umožňuje pomocí dalších přepínačů indexovat přímo obsahem. Přepínač i najde index první položky v poli, která odpovídá zadanému vzorci:

 484 /tmp> x=(Rosenkrantz Guildenstern Polonius)
 485 /tmp> echo $x[(i)*ste*]
 2
 486 /tmp> 

a pokud nás zajímá přímo nalezená hodnota, můžeme přímo použít přepínač r:

 486 /tmp> echo $x[(r)*ste*]
 Guildenstern
 487 /tmp>

Obě přepínače (i i r) lze použít i jako velká písmena; pak se vyhledá poslední výskyt v poli:

 487 /tmp> echo $x[(r)*o*] ... $x[(R)*o*]
 Rosenkrantz ... Polonius
 488 /tmp> 

Počet prvků a další přepínače...

Samotný počet prvků pole získáme pomocí znaku "#", vloženého před jméno proměnné:

 496 /tmp> x=($x and Hamlet)
 497 /tmp> echo $x
 Rosenkrantz Guildenstern Polonius and Hamlet
 498 /tmp> echo $#x
 5
 499 /tmp> 

Před jméno můžeme zapsat i řadu dalších přepínačů; ty už jsou ale representovány písmeny, a proto musíme použít komplexní zápis se závorkami. Přepínače "o" a "O" například prvky pole setřídí abecedně; navíc můžeme použít přepínač "i", který znamená "třídit nezávisle na velikosti písmen":

 499 /tmp> echo ${(o)x}     
 Guildenstern Hamlet Polonius Rosenkrantz and
 500 /tmp> echo ${(oi)x}
 and Guildenstern Hamlet Polonius Rosenkrantz
 501 /tmp> echo ${(O)x} 
 and Rosenkrantz Polonius Hamlet Guildenstern
 502 /tmp> 

Přepínač j, který má řetězcový parametr uzavřený mezi dvojtečky, vytvoří z pole textový řetězec tak, že jeho prvky spojí svým parametrem:

 505 /tmp> echo ${(j:, and :)x}
 Rosenkrantz, and Guildenstern, and Polonius, and and, and Hamlet
 506 /tmp> 

Velmi šikovný přepínač je také f, který rozdělí obsah pole podle řádků; k němu se však znovu vrátíme až později, až se budeme zabývat prací se soubory.

Shell toho umí ještě mnohem více...

...my však se pro začátek spokojíme s málem, a další přepínače a argumenty si ukazovat nebudeme (zájemce je všechny nalezne v dokumentaci na www.zsh.org).

Proměnných se však ještě chvíli musíme držet: příště se seznámíme se standardními proměnnými, které spravuje sám shell (jednu z nich už vlastně dávno známe: PATH není nic jiného, než speciální proměnná shellu).

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: