Подстановка имен файлов. Шаблоны
При запуске программ из командной строки часто требуется передать им в качестве аргументов одно или несколько имен файлов. Эти имена удобно задать шаблоном - например, /var/log/messages.?, что означает все файлы из каталога /var/log, имена которых начинаются на messages., а завершаются любым символом. Любой командный процессор умеет подставлять в командную строку имена файлов, соответствующие шаблону:
ls -l /var/log/messages.?
Символ "?" трактуется командным процессором как шаблон, которому соответствует один любой символ.
Обратите внимание на то, что командный процессор не понимает регулярных выражений. Его шаблоны похожи на регулярные выражения, но это - две совершенно разные вещи. Для обработки регулярных выражений в любом приложении используется стандартная функция regex, а шаблоны имен файлов командный процессор обрабатывает по-своему.
Командный процессор распознает и интерпретирует следующие символы в шаблонах (такие символы называются метасимволами, metasymbols или wildcards):
* | любая подстрока, в том числе пустая. |
? | один любой символ. |
[...] | один любой символ из списка (например, [avgf]) или диапазона (например, [a-z]). |
Порядок подстановки имен файлов по шаблону таков: вначале командный процессор находит все файлы, имена которых соответствуют шаблону, а затем подставляет имена всех этих файлов через пробел в строку в то место, где был написан шаблон.
Таким образом, если в текущем каталоге есть файлы money.c, money.bak, money.obj и wallet.x, то команда
ls -l mon*
будет раскрыта в
ls -l money.c money.bak money.obj