Menu

Expanze * ? []

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ě.

Expanze *

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

Expanze ?

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

Expanze []

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