Glob

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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

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ý znakPopisPříkladOdpovídáNeodpovídá
odpovídá libovolnému počtu libovolných znaků včetně žádnéhořád*řád, řády, řád a neřádneřá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. +moreesPes, pes, beses, 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]esPes, Vespes, 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]esaes, 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ý znakPopisPříkladOdpovídáNeodpovídá
odpovídá jednomu znaku, který není uveden v závorce[. P]esles, Les, pesPes
odpovídá jednomu znaku, který není z rozsahu uvedeného v závorce[. +morec-z]esaes, bes, žes, es, a pesces, 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. +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.

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top