Provided by: manpages-ro_4.27.0-1_all 

NUME
glob - globalizarea numelor de rută
DESCRIERE
Cu mult timp în urmă, în UNIX V6, exista un program /etc/glob care putea expanda modelele cu caractere
joker. La scurt timp după aceea, acesta a devenit un program încorporat în shell.
În prezent, există, de asemenea, o rutină de bibliotecă glob(3) care va îndeplini această funcție pentru
un program de utilizator.
Regulile sunt următoarele (POSIX.2, 3.13).
Potrivirea cu caractere joker
Un șir de caractere este un model de tip joker dacă conține unul dintre caracterele „?”, „*” sau „[”.
Globalizarea este operația care expandează un model de caractere joker într-o listă de nume de rute care
corespund modelului. Potrivirea este definită de:
Un „?” (nu între paranteze) se potrivește cu orice caracter unic.
Un „*” (nu între paranteze) se potrivește cu orice șir, inclusiv cu șirul gol.
Clase de caractere
O expresie „[...]” în care primul caracter după „[” de început nu este un „!” se potrivește cu un singur
caracter, și anume oricare dintre caracterele cuprinse între paranteze. Șirul cuprins între paranteze nu
poate fi gol; prin urmare, „]” poate fi permis între paranteze, cu condiția ca acesta să fie primul
caracter; (astfel, „[][!]” se potrivește cu cele trei caractere „[”, „]” și „!”).
Intervale
Există o convenție specială: două caractere separate prin „-” reprezintă un interval; (astfel,
„[A-Fa-f0-9]” este echivalent cu „[ABCDEFabcdef0123456789]”). Se poate include „-” în sensul său literal,
făcându-l primul sau ultimul caracter dintre paranteze; (astfel, „[]-]” se potrivește doar cu cele două
caractere „]” și „-”, iar „[--0]” se potrivește cu cele trei caractere „-”, „.” și „0”, deoarece „/” nu
poate fi potrivit).
Complementare
O expresie „[![...]” se potrivește cu un singur caracter, și anume orice caracter care nu se potrivește
cu expresia obținută prin eliminarea primului „!” din ea; (astfel, „[!]a-]” se potrivește cu orice
caracter, cu excepția lui „]”, „a” și „-”).
Se poate elimina semnificația specială a „?”, „*” și „[” precedându-le de o bară oblică inversă sau, în
cazul în care acestea fac parte dintr-o linie de comandă de shell, încadrându-le între ghilimele. Între
paranteze, aceste caractere sunt de sine stătătoare. Astfel, „[[?*\” se potrivește cu cele patru
caractere „[”, „?”, „*” și „\”.
Nume de rută
Globalizarea se aplică separat pentru fiecare dintre componentele unui nume de rută. Un „/” într-un nume
de rută nu poate fi asociat cu un joker „?” sau „*”, sau cu un interval de tipul „[.-0]”. Un interval
care conține un caracter explicit „/” este incorect din punct de vedere sintactic; (POSIX cere ca
modelele incorecte din punct de vedere sintactic să fie lăsate neschimbate).
În cazul în care un nume de fișier începe cu un „.”, acest caracter trebuie să se potrivească în mod
explicit; (astfel, comanda «rm *» nu va elimina .profile, iar comanda «tar c *» nu va arhiva toate
fișierele; execuția comenzii anterioare, cu „modelul” schimbat «tar c .» este mai indicată).
Liste goale
Regula frumoasă și simplă dată mai sus: „expandează un model cu caractere joker în lista de nume de rută
corespondente” a fost definiția originală UNIX. Aceasta permitea să existe modele care se extind într-o
listă goală, ca în cazul
xv -wait 0 *.gif *.jpg
unde poate că nu există niciun fișier *.gif (și aceasta nu este o eroare). Cu toate acestea, POSIX impune
ca un model cu caracter joker să fie lăsat neschimbat atunci când este incorect din punct de vedere
sintactic sau când lista de nume de rută corespondente este goală. Cu bash se poate forța comportamentul
clasic folosind această comandă:
shopt -s nullglob
(Probleme similare apar și în alte cazuri. De exemplu, în cazul în care scripturile vechi au
rm `find . -name "*~"`
scripturile noi necesită
rm -f nosuchfile `find . -name "*~"`
ca să evite mesajele de eroare de la rm apelat cu o listă de argumente goală).
NOTE
Expresii regulate
Rețineți că modelele cu caractere joker nu sunt expresii regulate, deși sunt puțin asemănătoare. În
primul rând, acestea se potrivesc mai degrabă cu nume de fișiere decât cu text și, în al doilea rând,
convențiile nu sunt aceleași: de exemplu, într-o expresie regulată „*” înseamnă zero sau mai multe copii
ale lucrului precedent.
Acum că expresiile regulate au expresii cu paranteze în care negația este indicată de un „^”, POSIX a
declarat că efectul unui model cu caracter joker „[^...]” este nedefinit.
Clase de caractere și internaționalizare
Desigur, intervalele au fost inițial concepute ca intervale ASCII, astfel încât „[ -%]” reprezintă
„[ !"#$%]” și „[a-z]” reprezintă „orice literă minusculă”. Unele implementări UNIX au generalizat acest
lucru, astfel încât un interval X-Y reprezintă setul de caractere cu coduri între codurile pentru X și Y.
Cu toate acestea, acest lucru necesită ca utilizatorul să cunoască codificarea caracterelor utilizată pe
sistemul local și, în plus, nu este convenabil dacă secvența de colaționare pentru alfabetul local diferă
de ordinea codurilor de caractere. Prin urmare, POSIX a extins foarte mult notația parantezelor, atât
pentru modelele cu caractere joker, cât și pentru expresiile regulate. În cele de mai sus am văzut trei
tipuri de elemente care pot apărea într-o expresie cu paranteze: și anume (i) negația, (ii) caractere
unice explicite și (iii) intervale. POSIX specifică intervalele într-un mod mai util la nivel
internațional și adaugă încă trei tipuri:
(iii) Intervalele X-Y cuprind toate caracterele care se încadrează între X și Y (inclusiv) în secvența de
colaționare curentă, așa cum este definită de categoria LC_COLLATE din configurația regională curentă.
(iv) Clase de caractere numite, cum ar fi
[:alnum:] [:alpha:] [:blank:] [:cntrl:]
[:digit:] [:graph:] [:lower:] [:print:]
[:punct:] [:space:] [:upper:] [:xdigit:]
astfel încât să se poată spune „[[:lower:]]” în loc de „[a-z]”, iar lucrurile să funcționeze și în
Danemarca, unde există trei litere după „z” în alfabet. Aceste clase de caractere sunt definite de
categoria LC_CTYPE din configurația regională curentă.
(v) Simboluri de colaționare, cum ar fi „[.ch.]” sau „[.a-acute.]”, în cazul în care șirul dintre „[.” și
„.]” este un element de colaționare definit pentru configurația regională curentă. Rețineți că acesta
poate fi un element cu mai multe caractere.
(vi) Expresii din clasa de echivalență, cum ar fi „[=a=]”, unde șirul dintre „[=” și „=]” este orice
element de colaționare din clasa de echivalență, așa cum este definit pentru configurația regională
curentă. De exemplu, „[[=a=]]” poate fi echivalent cu „[aáàäâ]”, adică
„[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]”.
CONSULTAȚI ȘI
sh(1), fnmatch(3), glob(3), locale(7), regex(7)
TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu
<remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o
versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO
RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
ro@lists.sourceforge.net.
Pagini de manual de Linux 6.9.1 15 iunie 2024 glob(7)