Алиса перенесла в каталог «Старые_файлы/» файл «Домашняя страница[13].htm» из системы, которой ранее пользовалась.
Как ей к нему обратиться? Буквальное указание в командной строке цепочки символов, совпадающей с именем файла, очевидно, не приведет к разумному результату, поскольку будет интерпретировано как список, состоящий из имени «Домашняя» и шаблона «страница[13].htm» (которому могут соответствовать файлы «страница1.htm» и «страница3.htm»).
Рис. 1-22
В лучшем случае эти файлы не будут найдены (Рис. 1-22), в худшем будут найдены другие файлы, чьи названия случайно совпадут с элементами невольно введенного «списка» или результатами раскрытия «шаблона».
Чтобы указать в командной строке файл, чье имя содержит специальные символы, эти символы необходимо экранировать , т.е. «защитить» от раскрытия. Экранировать отдельный символ можно, поставив перед ними символ обратной косой черты («\», «бэкслэш»). Цепочка «Домашняя\ страница\[13\].htm» раскрывается в цепочку «Домашняя страница[13].htm» (Рис. 1-23).
Рис. 1-23
Экранировать бэкслэшем можно любой специальный символ. Если необходимо, чтобы в цепочке был раскрыт сам символ «\», он также экранируется.
[alice@wonderland Старые_файлы]$ echo Cпециальные символы в шаблонах – это вопросительный знак \?, звездочка \*, квадратные скобки \[ и \]. Их можно экранировать обратной косой чертой \\
Cпециальные символы в шаблонах – это вопросительный знак ?, звездочка *, квадратные скобки [ и ]. Их можно экранировать обратной косой чертой \
Рис. 1-24
Другой способ экранировать специальные символы от интерпретации как шаблонных – заключить имя файла целиком в апострофы («'») или кавычки («"»).
Рис. 1-25
Экранирование апострофами несколько отличается от экранирования кавычками, но эти отличия мы обсудим позже.
Хотя используя экранирование можно создавать, перемещать и копировать, уничтожать файлы, имена которых состоят практически из любых символов, включать специальные (как шаблонные, так и прочие) символы в имена файлов крайне не рекомендуется, так как это заметно повышает вероятность ошибки при вводе.
Оболочка не придает никакого особого значения точке в имени файла (кроме случаев, когда имя начинается с точки), и «расширение имени файла» – это лишь интерпретация пользователя (и, возможно, некоторых программ). Поэтому в отличие от ряда альтернативных систем шаблон «*.» означает не «все файлы с именами без расширений» (как в «РСЭКС-11» или «МС-ДОС»), но буквально «все файлы с именами, заканчивающимися на точку».
Перенаправление ввода-вывода
Команды «cp», «ls», «mkdir», «mv», «rm», «rmdir», «touch», с помощью которых Алиса манипулировала файлами в примерах выше, обычно относят к «файловым утилитам». Все они позволяют манипулировать файлом (копировать, выводить информацию о нем, переименовывать или перемещать, создавать) как единым целым. Любые действия файловых утилит совершенно безразличны к содержимому файлов.
Команда «cat» обычно относится к «текстовым утилитам». Строго говоря, она может обрабатывать и двоичные файлы, но применительно к ним, как правило, операция объединения (а именно объединение содержимого нескольких файлов в один и является «титульной» функцией этой команды, название которой представляет собой сокращение от английского «(con)catenate» – «(кон)катенировать», «сцеплять») бессмысленна.
Рис. 1-26
Введя команду «cat» без аргументов (Рис. 1-26), Алиса сталкивается с новой для себя ситуацией: ее подача не приводит ни к какому видимому результату, никакого вывода на экране не появляется, но и подсказки, которая была бы знаком успешного завершения команды, тоже нет. Дело в том, что команда «cat», в отличие от ранее рассмотренных, не только выводит, но и вводит данные.
Вводя произвольные строки 22(Рис. 1-27), Алиса обнаруживает, что каждая введенная ею строка после нажатия Enter вновь выводится на терминал. Команда «cat», поданная без аргумента, копирует содержимое ввода в вывод построчно 23.
Читать дальше