Globy jsou v oblasti programování řetězce obsahující žolíkový znak a řetězec. Vytváření globů se nazývá globování. Například příkaz v programovacím jazyce Bash mv *.txt textfiles/ přesune všechny txt soubory z aktuálního adresáře do adresáře textfiles. V tomto případě je * žolíkový znak pro jakýkoli řetězec znaků vyjma znaku /, část *.txt je glob. Dalším běžným zástupným znakem je otazník (?), který zastupuje jeden znak. Například mv ?.txt shorttextfiles/ přesune všechny txt soubory pojmenované jedním znakem z aktuálního adresáře do adresáře shorttextfiles, zatímco ??.txt bude odpovídat všem textovým souborům, jejichž název se skládá ze 2 znaků.

Kromě shody názvů souborů se globs také široce používají pro porovnávání libovolných řetězců (shoda zástupných znaků). V této funkci je společným rozhraním fnmatch.

Původ náhled| Snímek obrazovky původní referenční stránky Unixu z roku 1971 pro glob Příkaz glob, zkratka pro global (česky globální), pochází z nejstarších verzí Unixu. Interpreti příkazů raných verzí Unixu (1. až 6. vydání, 1969–1975) se spoléhali na samostatný program pro rozšíření zástupných znaků v argumentech bez uvozovek na příkaz glob. Tento program provedl rozšíření a dodal rozšířený seznam cest k souboru příkazu k provedení.

Glob byl původně napsán v programovacím jazyce B.https://www.cs.dartmouth.edu/~doug/reader.pdf Později byla tato funkce přidána do knihovny programovacího jazyka C. Tuto funkci ve formátu glob(), používají programy jako je shell. Obvykle je definována na základě funkce s názvem fnmatch(), která testuje, zda řetězec odpovídá danému vzoru – program používající tuto funkci pak může iterovat řadu řetězců (obvykle názvy souborů), aby určil, které z nich jsou si rovny. Obě funkce jsou součástí dokumentace POSIX: funkce definované v POSIX.1 od roku 2001 a syntaxe definovaná v POSIX.2.

Globy nanehrazují unixové označení skrytých souborů. Pokud má glob zahrnout i skrytý soubor, který bývá na začátku označen znakem tečka, musí se před zástupný znak vložit také znak .. Například * odpovídá všem viditelným souborům, zatímco .* odpovídá všem skrytým souborům.

Syntax Nejběžnější žolíkové znaky jsou , a [něco]. Žolíkový znak Popis Příklad Odpovídá Neodpovídá odpovídá libovolnému počtu libovolných znaků včetně žádného řád* řád, řády, řád a neřád neřád, ád *řád* řád, řády, řády a neřády, neřád řá odpovídá libovolnému jednotlivému znaku ?es Pes, pes, bes es, náves, eso???odpovídá libovolným třem znakům???esnáves, 256es, a pespes, es, maxipes odpovídá jednomu znaku uvedenému v závorce [PV]es Pes, Ves pes, ves, PVes, Les, les, náves, Eso odpovídá jednomu znaku z rozsahu (závislého na národním prostředí) uvedeného v závorce [a-z]es aes, bes, ces, čes až zes žes, es, a pes Obvykle se znak oddělovače cesty ( na Linuxu/Unixu, MacOS atd. nebo na Windows) nikdy nebude shodovat. Některé shelly, jako je Bash, mají funkce, které uživatelům umožňují toto obejít.

Systémy na bázi Unix Na systémech podobných Unixu fungují znaky a tak, jak je uvedeno výše, zatímco řetězec [něco] má dva další významy: Žolýkový znak Popis Příklad Odpovídá Neodpovídá odpovídá jednomu znaku, který není uveden v závorce [!P]es les, Les, pes Pes odpovídá jednomu znaku, který není z rozsahu uvedeného v závorce [!c-z]es aes, bes, žes, es, a pes ces, pes, les Rozsahy mohou také zahrnovat předdefinované třídy znaků, třídy ekvivalence pro znaky s diakritikou a symboly řazení pro znaky, které se obtížně zadávají. Jsou definovány tak, aby odpovídaly hranatým závorkám v regulárních výrazech standardu POSIX.

Unixové globování je řešeno shellem podle POSIXu. Globuje se s názvy souborů na příkazovém řádku a v shellových skryptech. Příkaz case v shellu nařízený POSIXem poskytuje porovnávání vzorů pomocí vzorů glob.

Některé shelly (jako je C shell a Bash) podporují další syntaxi známou jako alternace nebo expanze složených závorek. Protože to není součástí syntaxe glob, není poskytováno v case. Rozbaluje se pouze na příkazovém řádku před globováním.

Shell Bash také podporuje následující rozšíření:

Rozšířené globování (extglob): umožňuje použití jiných operátorů pro párování vzorů s více výskyty vzoru uzavřeného v závorkách, což v podstatě poskytuje chybějící kleene hvězdu a alternaci pro popis regulárních jazyků. Lze jej povolit nastavením možnosti shell. Tato možnost pochází z Korn shellu verze 3. GNU fnmatch a glob mají totožné rozšíření. globstar: umožňuje, aby ** jako komponenta názvu rekurzivně odpovídala libovolnému počtu vrstev neskrytých adresářů. Podporováno také knihovnami Javascriptu a globováním v Pythonu.

Odkazy

Reference

Kategorie:Unixové programátorské nástroje Kategorie:Pattern matching