.\" -*- coding: UTF-8 -*-
.\" Copyright (c) 1998 Andries Brouwer
.\"
.\" SPDX-License-Identifier: GPL-2.0-or-later
.\"
.\" 2003-08-24 fix for / by John Kristoff + joey
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH glob 7 "5 lutego 2023 r." "Linux man\-pages 6.03" 
.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.
.PP
Obecnie istnieje również funkcja biblioteczna \fBglob\fP(3), która pełni taką
samą funkcję dla programów użytkownika.
.PP
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:
.PP
\[Bq]?\[rq] (poza nawiasami kwadratowymi) dopasowuje dowolny pojedynczy
znak.
.PP
\[Bq]*\[rq] (poza nawiasami kwadratowymi) dopasowuje dowolny łańcuch, w tym
łańcuch pusty.
.PP
\fBKlasy znakowe\fP
.PP
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]).
.PP
\fBZakresy\fP
.PP
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).
.PP
\fBDopełnianie\fP
.PP
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]).
.PP
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[[?*\e]\fP\[rq] dopasuje cztery znaki: \[Bq][\[rq], \[Bq]?\[rq],
\[Bq]*\[rq] i \[Bq]\e\[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).
.PP
Jeśli ścieżka zaczyna się od \[Bq].\[rq], znak ten musi zostać podany wprost
w wyrażeniu (zatem \fIrm\ *\fP nie usunie pliku .profile, 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
.PP
.nf
    xv \-wait 0 *.gif *.jpg
.fi
.PP
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:
.PP
.in +4n
.EX
shopt \-s nullglob
.EE
.in
.\" In Bash v1, by setting allow_null_glob_expansion=true
.PP
(Podobne problemy pojawiają się też gdzie indziej. Na przykład stare skrypty
mają
.PP
.in +4n
.EX
rm \`find . \-name "*\[ti]"\`
.EE
.in
.PP
a nowe skrypty wymagają
.PP
.in +4n
.EX
rm \-f braktakiegopliku \`find . \-name "*\[ti]"\`
.EE
.in
.PP
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.
.PP
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:
.PP
(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.
.PP
(IV) Nazwane klasy znakowe, jak
.PP
.nf
[:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]
[:digit:]  [:graph:]  [:lower:]  [:print:]
[:punct:]  [:space:]  [:upper:]  [:xdigit:]
.fi
.PP
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.
.PP
(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.
.PP
(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 <michal.kulach@gmail.com>
.
.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 .
