Чтобы повысить продуктивность, оболочка предусматривает ряд спецсимволов для оптимизации работы и выполнения ряда задач.
Концепция работы с символами: *, ?, [], называется сопоставлением с шаблоном (pattern matching).
Если вы все еще путаетесь в том, что такое оболочка, предлагаю обратиться к моей последней сводке постов.
И так, команда может включать в себя символ групповых операций * для одновременной ссылки на несколько файлов:
$ ls *.py
data.py main.py user_interface.py
Этот символ обрабатывается командной оболочкой, а не программой ls. Оболочка заменяет выражение "*.py" списком имен подходящих файлов еще до запуска программы ls.
Иными словами, ls не увидит символ групповой операции. С точки зрения утилиты, вы ввели команду следующего вида:
$ ls data.py main.py user_interface.py
Символ * соответствует любой последовательности из символов в путях к файлам или каталогам.
Например, гораздо проще и быстрее, вместо прямого перечисления:
$ grep Linux chapter1 chapter2 chapter3 chapter4 chapter5...
Использовать базовый шаблон:
$ grep Linux chapter*
Остается за кадром, как командная оболочка (не программа grep) преобразует шаблон "chapter*" в список подходящих имен файлов. И только после этого оболочка запускает grep.
Если шаблон не соответствует ни одному файлу, оболочка передает его в качестве аргумента команды:
$ grep Linux chapter*
grep: chapter*: No such file or directory
Еще бывает полезно использовать знак ?, который соответствует любому единичному символу. Например, вы можете выполнить поиск слова Linux в главах с 1 по 9, используя ? для поиска совпадений:
$ grep Linux chapter?
Для поиска в главах с 10 по 99 придется использовать "??":
$ grep Linux chapter??
Менее известно использование скобок [] для запроса у оболочки соответствия одному из символов набора. Например, вы можете искать только в первых 3 главах:
$ grep Linux chapter[123]
$ grep Linux chapter[1-3]
Любые символы, не только цифры, могут быть помещены в квадратные скобки для сопоставления.
Например, следующая команда заставит оболочку искать имена файлов, начинающиеся с заглавной буквы, содержащие символ _ и заканчивающиеся символом @:
$ ls [A-Z]*_*@
LinuxCamp
