UNIX — универсальная среда программирования | страница 28



>$ pr ch1.1 ch1.2 ch1.3...

но вы быстро устанете вводить имена файлов и начнете делать ошибки. Именно здесь приходит на помощь сокращенное имя файла. Если задать

>$ pr ch*

интерпретатор >shell воспримет >* как любую последовательность символов, поэтому >ch* является шаблоном, под который подходят все имена файлов из текущего каталога, начинающиеся на >ch. Интерпретатор >shell создаст список в алфавитном порядке[3] и передаст его программе pr. Команда pr никогда "не узнает" * ; выбор по шаблону, который shell производит в текущем каталоге, порождает список строк, передаваемых >pr.

Ключевой момент состоит в том, что способ сокращения имени файла — это не свойство программы >pr, а возможность, реализуемая интерпретатором >shell. Поэтому вы можете использовать ее для создания последовательности имен файлов в любой команде, например для подсчета числа слов первой главы:

>$ wc ch1.*

> 113   562  3200 ch1.0

> 935  4081 22435 ch1.1

> 974  4191 22756 ch1.2

> 378  1561  8481 ch1.3

>1293  5298 28841 ch1.4

>  33   194  1190 ch1.5

>  75   323  2030 ch1.6

>3801 16210 88930 total

>$

Существует программа с именем >echo ("эхо"), которая особенно ценна для экспериментов со "смыслом" сокращенных имен. Как вы смогли догадаться, >echo лишь повторяет свои аргументы.

>$ echo hello world

>hello world

>$

Но аргументы могут формироваться путем выбора по шаблону. Так, команда

>$ echo ch1.*

перечисляет имена всех файлов в гл. 1,

>$ echo *

перечисляет имена всех файлов текущего каталога в алфавитном порядке,

>$ pr *

выводит на печать содержимое всех ваших файлов (в алфавитном порядке), а

>$ rm *

удаляет все файлы текущего каталога. (Лучше быть абсолютно уверенным, что вы действительно этого хотите!)

Символ >* может встречаться не только в конце имени файла. Его можно использовать всюду и даже по нескольку раз. Поэтому

>$ rm *.save

удалит все файлы, оканчивающиеся на >.save.

Заметьте, что все имена файлов выбираются в алфавитном порядке, который отличается от числового. Если в вашей книге 10 глав, порядок может быть не тем, на который вы рассчитываете, поскольку >ch10 идет перед >ch2:

>$ echo *

>ch1.1 ch1.2 ... ch10.1 ch10.2 ... ch2.1 ch2.2 ...

Символ >* — не единственный способ задания шаблона для интерпретатора >shell, хотя и наиболее часто используемый. Шаблон >[...] задает любые символы из перечисленных внутри скобок. Несколько подряд следующих букв или цифр можно задать в сокращенном виде:

>$ pr ch[12346789]* Печать глав 1,2,3,4,6,7,8,9, но не 5

>$ pr ch[1-46-9]*