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:
Informace
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):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová