* ? []
Expanze je činnost prováděná na úrovni shellu, která předtím, než spustí příkaz a předá mu parametry nahradí některé znaky či jejich posloupnosti něčím jiným. Prozatím se budeme bavit jen o expanzi na jména souborů. Obecné pravidlo je, že žádný z expanzních znaků * ? [] se neexpanduje na řetězec obsahující lomítko. Pokud chceme vybrat soubory v podadresářích, musíme napsat / explicitně. Stejně tak žádný z expanzních znaků * ? [] zapsaný na začátku vzoru neodpovídá skrytému souboru (začínajícímu tečkou). Pokud chceme vybrat skryté soubory, musíme . napsat explicitně.
*
Znak * se expanduje na libovolnou (i prázdnou) posloupnost znaků. Lépe to bude vidět na příkladu:
ls -d *
vypíše všechny neskryté soubory v pracovním adresáři
ls -d *.txt
vypíše všechny neskryté soubory s příponou .txt
ls -d *\ *
vypíše všechny neskryté soubory, které obsahují v názvu mezeru
ls -d /etc/*.conf
vypíše všechny neskryté soubory v adresáři /etc s příponou .conf
ls -d */*.jpg
vypíše všechny neskryté soubory s příponou jpg, které se nachází v podadresáři pracovního adresáře
ls -d .*
vypíše všechny skryté soubory
?
Znak ? se ve vzoru nahradí právě jedním libovolným znakem.
ls -d ???
vypíše všechny neskryté soubory s třípísmenným názvem
ls -d /tmp/*.??
vypíše všechny neskryté soubory v /tmp s dvoupísmennou příponou
[]
Dovnitř závorek [] můžeme napsat libovolnou množinu znaků. Závorky pak odpovídají jednomu znaku z dané množiny. Pokud je ale prvním znakem v množině !, závorky naopak odpovídají libovolnému znaku, který není ze zadané množiny. Místo vyjmenování jednotlivých znaků můžeme zadat i rozsah ([a-z], [0-9], …). Třetí možností je použít některou z předdefinovaných znakových tříd:
[:alnum:] – písmena a číslice [:lower:] – malá písmena [:space:] – mezery [:alpha:] – písmena [:digit:] – číslice [:print:] – tisknutelné znaky (tj. ty, které jsou při vypsání vidět) [:upper:] – velká písmena [:blank:] – bílé znaky (tj. ty, které při vypsání nejsou vidět) [:punct:] – interpunkce ... a další
Použití []:
ls -d *[0-9]*
vypíše všechny neskryté soubory, jejihž jméno obsahuje číslici
ls -d *[!0-9]*
vypíše všechny neskryté soubory, jejihž jméno obsahuje alespoň jednu nečíslici