* ? []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