.\" -*- coding: UTF-8 -*- .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH glob 7 "17 maja 2025 r." "Linux man\-pages 6.15" .SH NAZWA glob \- uzupełnianie ścieżek za pomocą wzorców wieloznacznikowych .SH OPIS Dawno temu, w systemie UNIX\ V6 istniał program \fI/etc/glob\fP interpretujący wzorce wieloznacznikowe. Jakiś czas później ta funkcja stała się wbudowaną cechą powłoki. .P Obecnie istnieje również funkcja biblioteczna \fBglob\fP(3), która pełni taką samą funkcję dla programów użytkownika. .P Reguły są następujące (POSIX.2, 3.13). .SS "Dopasowanie wieloznaczników" Dany łańcuch jest wzorcem wieloznacznikowym, jeśli zawiera jeden ze znaków: \[Bq]?\[rq], \[Bq]*\[rq] lub \[Bq][\[rq]. Interpretacja wieloznaczników (ang. globbing) to operacja interpretacji wzorca wieloznacznikowego na listę ścieżek pasujących do wzorca. Dopasowanie wygląda następująco: .P \[Bq]?\[rq] (poza nawiasami kwadratowymi) dopasowuje dowolny pojedynczy znak. .P \[Bq]*\[rq] (poza nawiasami kwadratowymi) dopasowuje dowolny łańcuch, w tym łańcuch pusty. .P \fBKlasy znakowe\fP .P Wyrażenie \[Bq]\fI[...]\fP\[rq] gdzie pierwszym znakiem po otwierającym \[Bq][\[rq] nie jest \[Bq]!\[rq] dopasowuje pojedynczy znak, a dokładnie dowolny ze znaków pomiędzy nawiasami kwadratowymi. Łańcuch ograniczony nawiasami kwadratowymi nie może być pusty; zatem znak \[Bq]]\[rq] może pojawić się w nawiasie kwadratowym, o ile tylko będzie pierwszym znakiem (dlatego \[Bq]\fI[][!]\fP\[rq] dopasuje trzy znaki: \[Bq][\[rq], \[Bq]]\[rq] i \[Bq]!\[rq]). .P \fBZakresy\fP .P Istnieje jedna specjalna konwencja: dwa znaki rozdzielone znakiem \[Bq]\-\[rq] oznaczają zakres (zatem \[Bq]\fI[A\-Fa\-f0\-9]\fP\[rq] jest równoważne \[Bq]\fI[ABCDEFabcdef0123456789]\fP\[rq]). Aby znak \[Bq]\-\[rq] miał swe dosłowne znaczenie, należy go umieścić jako pierwszy lub ostatni znak między nawiasami kwadratowymi (zatem \[Bq]\fI[]\-]\fP\[rq] dopasuje jedynie dwa znaki: \[Bq]]\[rq] i \[Bq]\-\[rq], natomiast \[Bq]\fI[\-\-0]\fP\[rq] dopasuje trzy znaki: \[Bq]\-\[rq], \[Bq].\[rq] i \[Bq]0\[rq], ponieważ \[Bq]/\[rq] nie może być dopasowane). .P \fBDopełnianie\fP .P Wyrażenie \[Bq]\fI[!...]\fP\[rq] dopasuje pojedynczy znak, a dokładnie dowolny znak, który nie zostanie dopasowany przez wyrażenie, otrzymane po usunięciu z niego początkowego \[Bq]!\[rq] (zatem \[Bq]\fI[!]a\-]\fP\[rq] dopasuje każdy pojedynczy znak poza \[Bq]]\[rq], \[Bq]a\[rq] i \[Bq]\-\[rq]). .P Można usunąć specjalne znaczenie znaków \[Bq]?\[rq], \[Bq]*\[rq] i \[Bq][\[rq] poprzedzając je odwrotnym ukośnikiem lub, jeśli są częścią wiersza polecenia powłoki, ujmując je w cudzysłów. Pomiędzy nawiasami kwadratowymi, znaki te zachowują swe dosłowne znaczenie. Zatem \[Bq]\fI[[?*\[rs]]\fP\[rq] dopasuje cztery znaki: \[Bq][\[rq], \[Bq]?\[rq], \[Bq]*\[rq] i \[Bq]\[rs]\[rq]. .SS Ścieżki Interpretacja wieloznaczników jest stosowana do każdej składowej ścieżki z osobna. \[Bq]/\[rq] w ścieżce nie może być dopasowane wieloznacznikiem \[Bq]?\[rq] i \[Bq]*\[rq] ani zakresem takim jak \[Bq]\fI[.\-0]\fP\[rq]. Zakres zawierający dosłowny znak \[Bq]/\[rq] stanowi błąd składni (POSIX wymaga, aby takie wzorce z błędem składni zostały pozostawiane bez zmian). .P Jeśli ścieżka zaczyna się od \[Bq].\[rq], znak ten musi zostać podany wprost w wyrażeniu (zatem \fIrm\ *\fP nie usunie pliku \fI.profile\fP, a \fItar\ c\ *\fP nie zarchiwizuje wszystkich plików użytkownika; lepsze będzie \fItar\ c\ .\fP). .SS "Puste listy" Ładna i prosta reguła podana wyżej: \[Bq]rozwiń wzorce wieloznacznikowe na listę pasujących ścieżek\[rq] była pierwotną definicją systemu UNIX. Pozwalała na wzorce, które rozwijały się na pustą listę, jak w .P .nf xv \-wait 0 *.gif *.jpg .fi .P gdy mógł nie występować żaden plik *.gif (i nie był to błąd). Jednak POSIX wymaga, aby wzorzec wieloznacznikowy był pozostawiany bez zmian, jeśli jest składniowo niepoprawny albo gdy lista dopasowanych ścieżek jest pusta. W powłoce \fIbash\fP można wymusić klasyczne zachowanie poleceniem: .P .in +4n .EX shopt \-s nullglob .EE .in .\" In Bash v1, by setting allow_null_glob_expansion=true .P (Podobne problemy pojawiają się też gdzie indziej. Na przykład stare skrypty mają .P .in +4n .EX rm \`find . \-name "*\[ti]"\` .EE .in .P a nowe skrypty wymagają .P .in +4n .EX rm \-f braktakiegopliku \`find . \-name "*\[ti]"\` .EE .in .P aby uniknąć błędu polecenia \fIrm\fP wywołanego z pustą listą argumentów). .SH UWAGI .SS "Wyrażenia regularne" Proszę zauważyć, że wzorce wieloznacznikowe nie są wyrażeniami regularnymi, choć są nieco podobne. Po pierwsze, dopasowują nazwy plików, a nie tekst, a po wtóre, konwencje różnią się: np. w wyrażeniu regularnym \[Bq]*\[rq] oznacza zero lub więcej wystąpień poprzedzającego elementu. .P Obecnie, gdy wyrażenia regularne posiadają wyrażenia klamrowe, gdzie negację oznacza się przez \[Bq]\[ha]\[rq], POSIX deklaruje wynik wyrażenia klamrowego \[Bq]\fI[\[ha]...]\fP\[rq] jako niezdefiniowany. .SS "Klasy znakowe i ustawienia międzynarodowe" Zakresy pierwotnie miały znaczyć oczywiście zakresy ASCII, zatem \[Bq]\fI[\ \-%]\fP\[rq] oznaczał \[Bq]\fI[\ !"#$%]\fP\[rq], a \[Bq]\fI[a\-z]\fP\[rq] oznaczał \[Bq]dowolną małą literę\[rq]. Niektóre implementacje Uniksowe generalizują to w ten sposób, że zakres X\-Y oznacza zbiór znaków z kodami pomiędzy kodem X i kodem Y. Jednak wymaga to, aby użytkownik znak kodowanie znaków używane w lokalnym systemie, a co więcej, nie jest praktyczne, gdy kolejność sortowania w lokalnym alfabecie różni się od kolejności kodów znaków. Z tego względu norma POSIX rozszerzyła znacznie notację klamrową, zarówno w przypadku wzorców wieloznacznikowych jak i w przypadku wyrażeń regularnych. Powyżej opisano trzy typy elementów, które mogą pojawić się w wyrażeniach klamrowych: (I) negację, (II) dosłowny pojedynczy znak i (III) zakresy. POSIX określa zakresy w sposób bardziej użyteczny w kontekście międzynarodowym oraz dodaje trzy dodatkowe typy: .P (III) Zakresy X\-Y obejmują wszystkie znaki, które znajdują się pomiędzy X i Y (włącznie) w bieżącej kolejności sortowania zdefiniowanej przez kategorię \fBLC_COLLATE\fP w bieżących ustawieniach locale. .P (IV) Nazwane klasy znakowe, jak .P .nf [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] .fi .P tak więc można użyć \[Bq]\fI[[:lower:]]\fP\[rq] zamiast \[Bq]\fI[a\-z]\fP\[rq], co zadziała poprawnie również w Danii, gdzie alfabet ma jeszcze trzy litery po literze \[Bq]z\[rq] (albo w języku polskim, z polskim \[Bq]ź\[rq] i \[Bq]ż\[rq] \- przyp. tłum.). Te klasy znakowe są zdefiniowane w kategorii \fBLC_CTYPE\fP w bieżących ustawieniach locale. .P (V) Symbole sortowania, takie jak \[Bq]\fI[.ch.]\fP\[rq] lub \[Bq]\fI[.a\-acute.]\fP\[rq], gdzie łańcuch pomiędzy \[Bq]\fI[.\fP\[rq] a \[Bq]\fI.]\fP\[rq] jest elementem sortowania zdefiniowanym dla aktualnego ustawienia locale. Proszę zauważyć, że może być to element złożony z wielu znaków. .P (VI) Wyrażenia klasy równoważnej, jak \[Bq]\fI[=a=]\fP\[rq], gdzie łańcuch pomiędzy \[Bq]\fI[=\fP\[rq] a \[Bq]\fI=]\fP\[rq] jest elementem sortowania ze swojej klasy równoważnej, zdefiniowanym dla bieżących ustawień lokale. Na przykład \[Bq]\fI[[=a=]]\fP\[rq] może być równoważny\[Bq]\fI[a\('a\(`a\(:a\(^a]\fP\[rq], tj. \[Bq]\fI[a[.a\-acute.][.a\-grave.][.a\-umlaut.][.a\-circumflex.]]\fP\[rq]. .SH "ZOBACZ TAKŻE" \fBsh\fP(1), \fBfnmatch\fP(3), \fBglob\fP(3), \fBlocale\fP(7), \fBregex\fP(7) .PP .SH TŁUMACZENIE Tłumaczenie niniejszej strony podręcznika: Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .