Glob
Author
Albert FloresGloby 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
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. +more 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. Později byla tato funkce přidána do knihovny programovacího jazyka C. +more 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 čárkou, musí se před zástupný znak vložit tečka. +more 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 | |
odpovídá libovolnému počtu libovolných znaků včetně žádného | *řád* | řád, řády, řády a neřády, neřád | řá | |
odpovídá libovolnému jednotlivému znaku | . +morees | Pes, pes, bes | es, náves, eso | |
. | odpovídá libovolným třem znakům | . es | náves, 256es, a pes | pes, 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 |
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 | [. +morec-z]es | aes, bes, žes, es, a pes | ces, pes, les |
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. +more 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. +more 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. +more 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.