Provided by: manpages-pl_4.27.0-1_all bug

NAZWA

       glob - uzupełnianie ścieżek za pomocą wzorców wieloznacznikowych

OPIS

       Dawno  temu,  w  systemie UNIX V6 istniał program /etc/glob interpretujący wzorce wieloznacznikowe. Jakiś
       czas później ta funkcja stała się wbudowaną cechą powłoki.

       Obecnie istnieje również funkcja biblioteczna glob(3),  która  pełni  taką  samą  funkcję  dla  programów
       użytkownika.

       Reguły są następujące (POSIX.2, 3.13).

   Dopasowanie wieloznaczników
       Dany  łańcuch  jest  wzorcem  wieloznacznikowym,  jeśli  zawiera  jeden  ze  znaków:  „?”,  „*”  lub „[”.
       Interpretacja wieloznaczników (ang. globbing) to  operacja  interpretacji  wzorca  wieloznacznikowego  na
       listę ścieżek pasujących do wzorca. Dopasowanie wygląda następująco:

       „?” (poza nawiasami kwadratowymi) dopasowuje dowolny pojedynczy znak.

       „*” (poza nawiasami kwadratowymi) dopasowuje dowolny łańcuch, w tym łańcuch pusty.

       Klasy znakowe

       Wyrażenie  „[...]” gdzie pierwszym znakiem po otwierającym „[” nie jest „!” 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 „]” może pojawić się w nawiasie kwadratowym, o ile tylko będzie pierwszym
       znakiem (dlatego „[][!]” dopasuje trzy znaki: „[”, „]” i „!”).

       Zakresy

       Istnieje  jedna  specjalna  konwencja:  dwa  znaki  rozdzielone  znakiem  „-”  oznaczają  zakres   (zatem
       „[A-Fa-f0-9]”  jest  równoważne  „[ABCDEFabcdef0123456789]”).  Aby  znak „-” miał swe dosłowne znaczenie,
       należy go umieścić jako pierwszy lub ostatni znak między nawiasami kwadratowymi  (zatem  „[]-]”  dopasuje
       jedynie  dwa  znaki:  „]”  i „-”, natomiast „[--0]” dopasuje trzy znaki: „-”, „.” i „0”, ponieważ „/” nie
       może być dopasowane).

       Dopełnianie

       Wyrażenie „[!...]” dopasuje pojedynczy znak, a dokładnie dowolny  znak,  który  nie  zostanie  dopasowany
       przez  wyrażenie,  otrzymane  po  usunięciu  z  niego  początkowego  „!”  (zatem  „[!]a-]” dopasuje każdy
       pojedynczy znak poza „]”, „a” i „-”).

       Można usunąć specjalne znaczenie znaków „?”, „*” i „[” 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 „[[?*\]” dopasuje cztery znaki: „[”, „?”, „*” i „\”.

   Ścieżki
       Interpretacja wieloznaczników jest stosowana do każdej składowej ścieżki z osobna. „/” w ścieżce nie może
       być  dopasowane  wieloznacznikiem  „?”  i „*” ani zakresem takim jak „[.-0]”. Zakres zawierający dosłowny
       znak „/” stanowi błąd składni (POSIX wymaga, aby takie wzorce z błędem składni zostały  pozostawiane  bez
       zmian).

       Jeśli  ścieżka  zaczyna się od „.”, znak ten musi zostać podany wprost w wyrażeniu (zatem rm * nie usunie
       pliku .profile, a tar c * nie zarchiwizuje wszystkich plików użytkownika; lepsze będzie tar c .).

   Puste listy
       Ładna i prosta reguła podana wyżej: „rozwiń wzorce wieloznacznikowe na  listę  pasujących  ścieżek”  była
       pierwotną definicją systemu UNIX. Pozwalała na wzorce, które rozwijały się na pustą listę, jak w

           xv -wait 0 *.gif *.jpg

       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 bash można wymusić klasyczne zachowanie poleceniem:

           shopt -s nullglob

       (Podobne problemy pojawiają się też gdzie indziej. Na przykład stare skrypty mają

           rm `find . -name "*~"`

       a nowe skrypty wymagają

           rm -f braktakiegopliku `find . -name "*~"`

       aby uniknąć błędu polecenia rm wywołanego z pustą listą argumentów).

UWAGI

   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 „*” oznacza zero lub więcej wystąpień poprzedzającego elementu.

       Obecnie, gdy wyrażenia regularne posiadają wyrażenia klamrowe, gdzie negację oznacza się przez „^”, POSIX
       deklaruje wynik wyrażenia klamrowego „[^...]” jako niezdefiniowany.

   Klasy znakowe i ustawienia międzynarodowe
       Zakresy  pierwotnie  miały znaczyć oczywiście zakresy ASCII, zatem „[ -%]” oznaczał „[ !"#$%]”, a „[a-z]”
       oznaczał „dowolną małą literę”. 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:

       (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ę LC_COLLATE w bieżących ustawieniach locale.

       (IV) Nazwane klasy znakowe, jak

       [:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]
       [:digit:]  [:graph:]  [:lower:]  [:print:]
       [:punct:]  [:space:]  [:upper:]  [:xdigit:]

       tak  więc  można użyć „[[:lower:]]” zamiast „[a-z]”, co zadziała poprawnie również w Danii, gdzie alfabet
       ma jeszcze trzy litery po literze „z” (albo w języku polskim, z polskim „ź” i „ż”  -  przyp.  tłum.).  Te
       klasy znakowe są zdefiniowane w kategorii LC_CTYPE w bieżących ustawieniach locale.

       (V)  Symbole  sortowania,  takie  jak „[.ch.]” lub „[.a-acute.]”, gdzie łańcuch pomiędzy „[.” a „.]” jest
       elementem sortowania zdefiniowanym dla aktualnego ustawienia locale. Proszę  zauważyć,  że  może  być  to
       element złożony z wielu znaków.

       (VI)  Wyrażenia  klasy  równoważnej,  jak  „[=a=]”,  gdzie  łańcuch  pomiędzy  „[=” a „=]” jest elementem
       sortowania ze swojej  klasy  równoważnej,  zdefiniowanym  dla  bieżących  ustawień  lokale.  Na  przykład
       „[[=a=]]” może być równoważny„[aáàäâ]”, tj. „[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]”.

ZOBACZ TAKŻE

       sh(1), fnmatch(3), glob(3), locale(7), regex(7)

TŁUMACZENIE

       Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając  się  z  GNU General Public License w wersji 3  lub  nowszej.   Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej manpages-pl-
       list@lists.sourceforge.net.

Linux man-pages 6.9.1                          15 czerwca 2024 r.                                        glob(7)