Оболочки специальным образом интерпретируют некоторые метасимволы, например, *, подставляя вместо них имена файлов. Такие метасимволы назы- ваются шаблонами подстановки. Символы подстановки позволяют оболочке произвести поиск файлов, имена которых удовлетворяют шаблону, и подста- вить их в командную строку.
В качестве команды для испытания шаблонов подстановки можно использо- вать команду echo, которая просто выводит на экран то, что ей задано в каче- стве аргумента.
Символ "звездочка" (*) является шаблоном для любого количества любых символов в именах файлов и даже для их отсутствия. Единственный символ, который не удовлетворяет этому шаблону, — лидирующая точка в именах скрытых файлов. Таким образом, подставив звездочку в качестве аргумента команде echo, мы либо увидим в результате саму звездочку, если в каталоге нет файлов, либо оболочка подставит команде echo имена всех файлов в ка- талоге в командную строку (пример 2.35).
В примере 2.35 производится переход в каталог /etc/xinetd.d, в котором есть несколько файлов, имена которых подставляются оболочкой в виде аргумен- тов команде echo, т. к. они удовлетворяют шаблону *.
Имеются особенные имена файлов, начинающиеся с точки, например,
.bashrc. Такие файлы называются скрытыми, т. к. их имена не выводятся ко- мандой ls без специальных опций. Шаблоном для имен скрытых файлов яв- ляется .* (точка и звездочка). Вообще, любые шаблоны для скрытых файлов должны начинаться с символа "точка".
Символ ? заменяет один символ в имени файла, который должен находиться в той позиции, где находится знак вопроса (пример 2.36).
В примере 2.36 получен список скрытых файлов (имена начинаются с точки), в именах которых после точки имеется шесть любых символов.
Можно еще более сузить диапазон поиска, используя набор символов, за- ключенных в квадратные скобки. Применение такого шаблона обозначает, что в данном месте должен находиться один любой символ из заданного множества. Для того чтобы указать допустимый диапазон символов в шабло- не, необходимо использовать квадратные скобки, а в них — требуемый диа- пазон. Например, [0-9] — шаблон подходит для любых цифр, а [a-zA-Z] — шаблон для букв английского.
Пример 2.37 демонстрирует вывод имен скрытых файлов, в именах которых после точки стоит символ b, c или d.
Если необходимо указать набор символов, не входящих во множество, следу- ет установить знак восклицания после открывающей скобки. Например, [!abc] — множество любых символов, кроме a, b или c.
Очень удобен, хотя и не относится к шаблонам, механизм перечисления Bash. Он позволяет задать множество вариантов, которое должна перебрать обо- лочка, составляя последовательно все варианты, заданные в фигурных скоб- ках (пример 2.38).
Пример 2.38. Перечисление
$ echo .bash{rc,_profile}
.bashrc .bash_profile
В примере 2.38 использован механизм перечисления для обращения к двум файлам: .bashrc и .bash_profile. Имена этих файлов имеют общую подстроку
.bash, коротая вынесена за фигурные скобки. В фигурных скобках через за- пятую перечислены варианты продолжения: rc и _profile.