glob(7) Miscellaneous Information Manual glob(7) NUME glob - globalizarea numelor de ruta DESCRIERE Cu mult timp in urma, in UNIX V6, exista un program /etc/glob care putea expanda modelele cu caractere joker. La scurt timp dupa aceea, acesta a devenit un program incorporat in shell. In prezent, exista, de asemenea, o rutina de biblioteca glob(3) care va indeplini aceasta funcie pentru un program de utilizator. Regulile sunt urmatoarele (POSIX.2, 3.13). Potrivirea cu caractere joker Un ir de caractere este un model de tip joker daca conine unul dintre caracterele ,,?", ,,*" sau ,,[". Globalizarea este operaia care expandeaza un model de caractere joker intr-o lista de nume de rute care corespund modelului. Potrivirea este definita de: Un ,,?" (nu intre paranteze) se potrivete cu orice caracter unic. Un ,,*" (nu intre paranteze) se potrivete cu orice ir, inclusiv cu irul gol. Clase de caractere O expresie ,,[...]" in care primul caracter dupa ,,[" de inceput nu este un ,,!" se potrivete cu un singur caracter, i anume oricare dintre caracterele cuprinse intre paranteze. irul cuprins intre paranteze nu poate fi gol; prin urmare, ,,]" poate fi permis intre paranteze, cu condiia ca acesta sa fie primul caracter; (astfel, ,,[][!]" se potrivete cu cele trei caractere ,,[", ,,]" i ,,!"). Intervale Exista o convenie speciala: doua caractere separate prin ,,-" reprezinta un interval; (astfel, ,,[A-Fa-f0-9]" este echivalent cu ,,[ABCDEFabcdef0123456789]"). Se poate include ,,-" in sensul sau literal, facandu-l primul sau ultimul caracter dintre paranteze; (astfel, ,,[]-]" se potrivete doar cu cele doua caractere ,,]" i ,,-", iar ,,[--0]" se potrivete cu cele trei caractere ,,-", ,,." i ,,0", deoarece ,,/" nu poate fi potrivit). Complementare O expresie ,,[![...]" se potrivete cu un singur caracter, i anume orice caracter care nu se potrivete cu expresia obinuta prin eliminarea primului ,,!" din ea; (astfel, ,,[!]a-]" se potrivete cu orice caracter, cu excepia lui ,,]", ,,a" i ,,-"). Se poate elimina semnificaia speciala a ,,?", ,,*" i ,,[" precedandu-le de o bara oblica inversa sau, in cazul in care acestea fac parte dintr-o linie de comanda de shell, incadrandu-le intre ghilimele. Intre paranteze, aceste caractere sunt de sine statatoare. Astfel, ,,[[?*\" se potrivete cu cele patru caractere ,,[", ,,?", ,,*" i ,,\". Nume de ruta Globalizarea se aplica separat pentru fiecare dintre componentele unui nume de ruta. Un ,,/" intr-un nume de ruta nu poate fi asociat cu un joker ,,?" sau ,,*", sau cu un interval de tipul ,,[.-0]". Un interval care conine un caracter explicit ,,/" este incorect din punct de vedere sintactic; (POSIX cere ca modelele incorecte din punct de vedere sintactic sa fie lasate neschimbate). In cazul in care un nume de fiier incepe cu un ,,.", acest caracter trebuie sa se potriveasca in mod explicit; (astfel, comanda <> nu va elimina .profile, iar comanda <> nu va arhiva toate fiierele; execuia comenzii anterioare, cu ,,modelul" schimbat <> este mai indicata). Liste goale Regula frumoasa i simpla data mai sus: ,,expandeaza un model cu caractere joker in lista de nume de ruta corespondente" a fost definiia originala UNIX. Aceasta permitea sa existe modele care se extind intr-o lista goala, ca in cazul xv -wait 0 *.gif *.jpg unde poate ca nu exista niciun fiier *.gif (i aceasta nu este o eroare). Cu toate acestea, POSIX impune ca un model cu caracter joker sa fie lasat neschimbat atunci cand este incorect din punct de vedere sintactic sau cand lista de nume de ruta corespondente este goala. Cu bash se poate fora comportamentul clasic folosind aceasta comanda: shopt -s nullglob (Probleme similare apar i in alte cazuri. De exemplu, in cazul in care scripturile vechi au rm `find . -name "*~"` scripturile noi necesita rm -f nosuchfile `find . -name "*~"` ca sa evite mesajele de eroare de la rm apelat cu o lista de argumente goala). NOTE Expresii regulate Reinei ca modelele cu caractere joker nu sunt expresii regulate, dei sunt puin asemanatoare. In primul rand, acestea se potrivesc mai degraba cu nume de fiiere decat cu text i, in al doilea rand, conveniile nu sunt aceleai: de exemplu, intr-o expresie regulata ,,*" inseamna zero sau mai multe copii ale lucrului precedent. Acum ca expresiile regulate au expresii cu paranteze in care negaia este indicata de un ,,^", POSIX a declarat ca efectul unui model cu caracter joker ,,[^...]" este nedefinit. Clase de caractere i internaionalizare Desigur, intervalele au fost iniial concepute ca intervale ASCII, astfel incat ,,[ -%]" reprezinta ,,[ !"#$%]" i ,,[a-z]" reprezinta ,,orice litera minuscula". Unele implementari UNIX au generalizat acest lucru, astfel incat un interval X-Y reprezinta setul de caractere cu coduri intre codurile pentru X i Y. Cu toate acestea, acest lucru necesita ca utilizatorul sa cunoasca codificarea caracterelor utilizata pe sistemul local i, in plus, nu este convenabil daca secvena de colaionare pentru alfabetul local difera de ordinea codurilor de caractere. Prin urmare, POSIX a extins foarte mult notaia parantezelor, atat pentru modelele cu caractere joker, cat i pentru expresiile regulate. In cele de mai sus am vazut trei tipuri de elemente care pot aparea intr-o expresie cu paranteze: i anume (i) negaia, (ii) caractere unice explicite i (iii) intervale. POSIX specifica intervalele intr-un mod mai util la nivel internaional i adauga inca trei tipuri: (iii) Intervalele X-Y cuprind toate caracterele care se incadreaza intre X i Y (inclusiv) in secvena de colaionare curenta, aa cum este definita de categoria LC_COLLATE din configuraia regionala curenta. (iv) Clase de caractere numite, cum ar fi [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] astfel incat sa se poata spune ,,[[:lower:]]" in loc de ,,[a-z]", iar lucrurile sa funcioneze i in Danemarca, unde exista trei litere dupa ,,z" in alfabet. Aceste clase de caractere sunt definite de categoria LC_CTYPE din configuraia regionala curenta. (v) Simboluri de colaionare, cum ar fi ,,[.ch.]" sau ,,[.a-acute.]", in cazul in care irul dintre ,,[." i ,,.]" este un element de colaionare definit pentru configuraia regionala curenta. Reinei ca acesta poate fi un element cu mai multe caractere. (vi) Expresii din clasa de echivalena, cum ar fi ,,[=a=]", unde irul dintre ,,[=" i ,,=]" este orice element de colaionare din clasa de echivalena, aa cum este definit pentru configuraia regionala curenta. De exemplu, ,,[[=a=]]" poate fi echivalent cu ,,[aaaaa]", adica cu ,,[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]". CONSULTAI I sh(1), fnmatch(3), glob(3), locale(7), regex(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.9.1 15 iunie 2024 glob(7)