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]*