Znaki uogólniające są podgrupą znaków specjalnych, które dla powłoki shella mają inne znaczenie niż znak literowy. Wyróżniamy następujące znaki specjalne:
* ? [ ] < > & | / | ‘ ` ” $ ! % ( ) { } @ \
Manipulowanie znakami specjalnymi, których znaczenie będziemy stopniowo poznawać, jest umiejętnością trudną i wymagającą dużo ćwiczeń i praktyki, dlatego też poświecimy im – jak już wspomniałem we wstępie - dużo miejsca i czasu, bowiem ich dobra znajomość jest niezbędna do sprawnego posługiwania się systemem Unix, Linux, a także językami używanymi do programowania w Internecie (HTLM, Perl, PHP itd.).
Zanim przejdziemy do omówienia mechanizmu protekcji znaków uogólniających i specjalnych, omówimy dokładniej funkcjonowaniu znaku * , którego znaczenie w mechanizmie uogólniania nazw plików oznacza wyszukanie dowolnej (również zerowej) długości łańcucha znaków. Znak gwiazdki występuje także w tzw. wyrażeniach regularnych (patrz rozdział 8) i jego znaczenie jest w nich inne niż używanie gwiazdki w mechanizmie wyszukiwania plików. W wyrażeniach regularnych gwiazdka dopasowuje zero lub więcej wystąpień znaków poprzedzających *.
Zwracamy uwagę, że gwiazdka w wyrażeniach regularnych ma inne znaczenie niż gwiazdka w generowaniu nazwy plików, w tym przypadku * oznacza dowolnie długi – także pusty – ciąg różnych znaków. W wyrażeniach regularnych dowolny ciąg dowolnych znaków zapisujemy jako .*. Ta różnica występująca pomiędzy funkcjonowaniem * w dwóch podstawowych mechanizmach systemu Linux/Unix jest źródłem częstych kłopotów dla debiutantów, dlatego już w tej chwili ją sygnalizujemy.
Znaki specjalne mogą wyrażać swoje znaczenie literalne pod warunkiem, że są neutralizowane. Wyróżniamy następujące znaki neutralizujące:
\ → znak ten neutralizuje każdy znak znajdujący się natychmiast po nim np. \* oznacza, że wyszukujemy nie obojętnie jaki ciąg znaków, lecz szukamy „*”
”…” → neutralizuje wszystkie znaki specjalne oprócz: $ \ ‘
’…‘ → neutralizuje wszystkie znaki specjalne oprócz niego samego ’ ‘
Przykłady:
$ echo \*\*\* dzien dobry \*\*\*
*** dzien dobry *** → rezultat polecenia – czy możesz odpowiedzieć dlaczego ?
$ echo \\
\ → rezultat polecenia – czy możesz odpowiedzieć dlaczego ?
$ echo ’<<< dzien dobry>>>’
<<<dzien dobry>>>
$ echo ’ podwoje ‘’ ’
podwoje ‘’
Kurs Linux - Bash protekcja znaków uogólniających i specjalnych w Linuxie