Читаем UNIX — универсальная среда программирования полностью

$ pick '1 2' 3

1 2?

3?

$

Если вы хотите узнать, как команда pick читает свои аргументы, запустите ее и нажмите клавишу RETURN после каждого приглашения. В том виде, в каком написана эта команда, она выполняется отлично: в цикле for i аргументы обрабатываются правильно. Мы могли бы написать цикл другими способами:

$ grep for pick Выясните, что делает эта версия

for i in $*

$ pick '1 2' 3

1?

2?

3?

$

Эта версия не работаете поскольку операнды в цикле снова распознаются, а наличие пробелов в первом аргументе приводит к тому, что он разбивается на два аргумента. Попробуйте взять в кавычки $*:

$ grep for pick Попробуем другую версию

for i in "$*"

$ pick '1 2' 3

1 2 3?

$

Такая версия тоже не работает, поскольку "$*" является единым словом, которое образовано из всех аргументов, объединенных вместе с разделяющими пробелами. Но решение все-таки есть (это почти черная магия): строка трактуется особым образом интерпретатором и преобразуется в нужное число аргументов для командного файла:

$ grep for pick Попробуем третью версию

for i in "$@" '

$ pick '1 2' 3

1 2?

3?

$

Строка $@, не взятая в кавычки, идентична $*; она обрабатывается иначе, только если заключена в кавычки. Мы использовали ее в команде overwrite, чтобы сохранить аргументы для команды пользователя.

В итоге мы можем сформулировать следующие правила: $* и $@ раскрываются как аргументы и снова распознаются; наличие пробелов в аргументах приводит к разбиению их на несколько аргументов;

• "$*" является единым словом, которое образовано из всех аргументов командного файла, объединенных вместе с пробелами;

• «$*» идентично аргументам, получаемым командным файлом: пробелы в аргументах игнорируются, в результате получается список слов, идентичных исходным аргументам.

Если команда pick не имеет аргументов, она, по-видимому, должна читать стандартный входной поток, поэтому можно задать

$ pick mailinglist

вместо

$ pick `cat mailinglist`

Но мы не будем исследовать эту версию команды pick во избежание некоторых неприятных осложнений. Кроме того, значительно проще написать такую же программу на Си. С ней вы познакомитесь в следующей главе.

Первые два из приведенных ниже упражнений достаточно сложны, но полезны даже для опытных программистов, работающих на языке shell.

Упражнение 5.24

Попробуйте написать программу pick, которая читает аргументы из стандартного входного потока, если ничего не задано в командной строке. Она должна правильно обрабатывать пробелы. Будет ли допустим ответ q? Если нет, то попытайтесь выполнить следующее упражнение.

Упражнение 5.25

Хотя встроенные команды интерпретатора, такие, как read и set, нельзя переключить, можно временно переключить сам интерпретатор. Прочтите в справочном руководстве раздел по sh(1), в котором описывается команда exec, и придумайте, как читать из /dev/tty без вызова порожденного интерпретатора. (Может оказаться полезным сначала прочитать гл. 7.)

Упражнение 5.26

(Более простое.) Используйте команду read в вашем файле .profile для инициации TERM, а также всего, что зависит от нее, например позиции табуляции.

<p>5.8 Команда <code>news</code>: служба информации пользователей</p>

В гл. 1 упоминалось о том, что в вашей системе может быть команда news для передачи сообщений, представляющих интерес для всех пользователей системы. Хотя названия команды и ее детали могут различаться, большинство систем имеет службу информации. Мы рассматриваем команду news не для замены вашей местной команды, а чтобы показать, как легко написать такую программу на языке shell. Неплохо было бы сравнить реализацию предлагаемой здесь команды news с вашей версией.

Обычно основная идея таких программ заключается в том, что отдельные фрагменты новостей хранятся по одному в файлах в специальном каталоге типа /usr/news. Наша команда news сравнивает время изменения файлов в каталоге /usr/news и вашем исходном каталоге (.news_time). В целях отладки мы можем использовать каталог '.' как для файлов новостей, так и для news_time. Можно заменить его на /usr/news, когда программа будет готова для общего пользования:

$ cat news

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Секреты приложений Google
Секреты приложений Google

Даже продвинутые пользователи Интернета не подозревают о тех огромных возможностях, которые предоставляют сервисы Google. Автор рассказывает о таких «секретах» сервисов, которые просто немедленно хочется использовать! Создавать сайты и презентации, бродить по улочкам Парижа, изучать звездное небо – все это доступно каждому, кто сидит у экрана монитора и имеет доступ в Интернет. Книга научит вас работать с веб-приложениями и тысячекратно увеличить свои возможности с помощью новейших технологий. Она написана легким, доступным языком и не требует от читателя наличия каких-либо специальных знаний. Книга содержит множество примеров, иллюстраций и будет полезна всем, кто не стоит на месте и стремится сделать свою жизнь более насыщенной и интересной.

Денис Балуев , Денис Игоревич Балуев

Программирование, программы, базы данных / Интернет / Программное обеспечение / Книги по IT
Wi-Fi: Все, что Вы хотели знать, но боялись спросить
Wi-Fi: Все, что Вы хотели знать, но боялись спросить

Жизнь современного человека — это движение. Мобильность для нас становится одним из самых важных моментов для работы, для общения, для жизни. Многие из нас сейчас уже не представляют жизнь без сотовых телефонов, которые из средства роскоши превратились в предмет, без которого жизнь современного человека стала просто немыслима. Многие уже оценили все преимущества Bluetooth, GPRS. Эти устройства превратили наши телефоны из средств связи в незаменимых помощников в работе. К сожалению, один из самых главных недостатков этих беспроводных технологий — малый радиус действия и низкая скорость передачи данных, что сейчас становится очень важным фактором для всех нас. Поэтому к нам на помощь приходит активно развивающийся во всем мире и в России стандарт Wi-Fi. Особенно радует, что в крупных городах России, особенно в Москве и Санкт-Петербурге, начинается массовое внедрение беспроводных сетей Wi-Fi в публичных местах (так называемых Hot Spot) — отелях, аэропортах, ресторанах, торговых центрах и кафе.Что же такое Wi-Fi? Очередной мыльный пузырь IT-индустрии, который изо всех сил надувают производители и поставщики телекоммуникационного оборудования или новая технология, призванная в очередной раз изменить наш привычный мир, как это случилось когда-то с появлением Интернет и сотовой связи?

А К Щербаков , А. К. Щербаков

Компьютерное 'железо' (аппаратное обеспечение), цифровая обработка сигналов / Интернет / Компьютерное «железо» / Книги по IT