Žolíkové znaky jsou obecně silnou stránkou shellu bash. Jsou to vlastně vzory, podle kterých se porovnávají např. názvy souborů. Při jejich tvorbě se používají operátory *, ? a výrazy v hranatých závorkách [ ]. Příklad výrazu z žolíkovými znaky:
xconsole$ ls /bin/*sh
/bin/ash /bin/bash /bin/bsh /bin/csh /bin/sh /bin/tcsh
Tento program vlastně vypsal všechny shelly dostupné v mém systému, které mám v adresáři /bin. Nejjednodušší zástupné znaky jsou ? a *. Otazník reprezentuje pouze jediný jakýkoliv znak, hvězdička jich reprezentuje libovolné množství (i žádný). Je dobré si uvědomit, že pokud chceme vypsat všechny soubory z adresáře, nemusí se používat *.* jako v dosu, ale protože UNIX je nezávislý na příponách, stačí pouze hvězdička jedna (ls *).
Toto je však dostupné i v dosu. UNIX jde ovšem dál, mnohem dál.
Řekněme například, že chceme vypsat všechny shelly v systému, ale pouze ty, které začínají na a a b. Je to velmi jednoduché:
xconsole$ ls /bin/[a,b]*sh
/bin/ash /bin/bash /bin/bsh
Nebo například shelly, které mají jakýkoliv název, kromě těch, co začínají na c:
xconsole$ ls /bin/[^c]*sh /bin/sh
/bin/ash /bin/bash /bin/bsh /bin/sh /bin/tcsh
Do hranatých závorek se píšou znaky, které můžou být použity při expanzi tohoto výrazu. Pokud se však dá před ten konkrétní znak stříška (^), bere se to jako negace, čili tento znak se v řetězci vyskytnout nesmí. V adresáři by se však mohl vyskytnout soubor, který bude začínat na velké C. Tento soubor by ale vypsán byl. Jak tomu zabránit? Takto:
xconsole$ touch /bin/Csh
xconsole$ ls /bin/[^c^C]*sh /bin/sh
/bin/ash /bin/bash /bin/bsh /bin/sh /bin/tcsh
Nebo například chceme v adresáři všem souborům, které začínají na malé písmeno a jsou v adresáři /usr/bin odebrat právo pro zápis. Pro tento úkol můžeme použít následující skript:
#!/bin/bash
for i in /usr/bin/[a..z]*
do
chmod -w i
done
Toto byl úvod do tajemství žolíkových znaků. Nakonec bych ještě upozornil na tzv. regulární výrazy, které ovšem jsou žolíkovým znakům pouze podobné. Regulární výrazy se používají většinou v textových editorech na různé složité operace s texty, v programech jako awk, Perl, Tk. Ale také programy, které jdou využít i při našem skriptování v bash, a to programy grep a egrep. Slouží k vyhledávání řetězců v souborech. Více o těchto programech viz manuálové stránky nebo systém nápovědy info. Například chceme-li vypsat všechny programy jazyka C obsahující funkci main, použijeme tento zápis:
xconsole§ grep -l 'int.*main*(' *.c
Program (e)grep používá pro zápis skutečné regulární výrazy, o kterých se můžete dozvědět buď v manuálových stránkách či někde jinde na internetu.