3.5 Результат выполнения программы в качестве аргумента
3.5 Результат выполнения программы в качестве аргумента
Теперь перейдем от аргументов команд для командного файла к порождению аргументов. Конечно, расширение имен файлов с помощью метасимволов, подобных *, является наиболее типичным способом порождения аргументов (иным, чем их явное задание), но столь же хорошим способом представляется и выполнение программы. Результат выполнения любой программы можно использовать в командной строке, заключив ее вызов в символы слабого ударения `...`:
$ echo At the tone the time will be `date`.
At the tone the time will be Thu Sep 29 00:02:15 EDT 1983.
$
Небольшое изменение показывает, что `...` интерпретируется и внутри кавычек "...":
$ echo "At the tone
> the time will be `date`."
At the tone
the time will be Thu Sep 29 00:03:07 EDT 1983.
$
В качестве другого примера предположим, что вам необходимо послать почту группе людей, которые зарегистрированы под именем, хранящимся в файле mailinglist. Можно, конечно, отредактировать файл mailinglist так, чтобы он стал пригодным для применения команды mail и передать его интерпретатору, но значительно проще использовать команду
$ mail `cat mailinglist` <letter
Запуск команды cat порождает список имен пользователей, и эти имена становятся аргументами команды mail. (При обработке результата выполнения команды, помещенной между знаками слабого ударения и используемой в качестве аргумента, интерпретатор считает символы перевода строки разделителями слов, а не символами завершения командной строки; подробнее данный вопрос обсуждается в гл. 5.) Работать со знаками слабого ударения нетрудно, и поэтому, действительно, нет нужды вводить отдельный флаг команды mail, задающий список адресатов.
Несколько иной подход требуется для преобразования файла mailinglist из простого списка имен в программу, выдающую список имен:
$ cat mailinglist
echo don whr ejs mb Новая версия
$ cx mailinglist
$ mailinglist
don whr ejs mb
$
Теперь посылка писем адресатам из списка реализуется командой:
$ mail `mailinglist` <letter
Добавив еще одну программу, получим возможность даже изменять список пользователей в диалоге. Такая программа называется pick:
$ pick аргументы...
и выдает свои аргументы по одному, ожидая каждый раз ответа. Результатом действия команды pick являются те аргументы, на которые был дан ответ y (yes — да); при всяком другом ответе аргумент отбрасывается. Например,
$ pr `pick *.с` | lpr
Здесь вначале выдаются имена файлов, оканчивающиеся на .с. Выбранные имена печатаются с помощью команд pr и lpr. (Команда pick не входит в состав команд седьмой версии, но она столь проста и полезна, что мы включили ее варианты в гл. 5 и 6).
Допустим, вы используете второй вариант команды mailinglist. Тогда посылка писем адресатам don и mb выглядит так:
$ mail `pick `mailinglist`` <letter
don? y
whr?
ejs?
mb? y
$
Обратите внимание на вложенные знаки слабого ударения; обратная дробная черта запрещает обработку вложенной конструкции `...` при разборе внешних знаков слабого ударения.
Упражнение 3.10
Что произойдет, если опустить символы обратной дробной черты в команде
$ echo `echo `date``
Упражнение 3.11
Попробуйте ввести
$`date`
и объясните результат.
Упражнение 3.12
Команда
$ grep -l pattern filenames
перечисляет имена файлов, которые соответствуют шаблону, но больше ничего не выдает. Попытайтесь выполнить разные вариации такого задания:
$ command `grep -l pattern filenames`
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
20.1.1 Результат одобрения SNMP в IAB
20.1.1 Результат одобрения SNMP в IAB Первая спецификация SNMP стала начальной точкой. Эксперты из IAB быстро внесли необходимые изменения. Как указано в RFC 1052 (рекомендации по разработке стандартов сетевого управления для Интернета), служба сетевого управления
Результат
Результат После внесения пяти исправлений в модуль оформления заказа общие показатели эффективности магазинов, работающих под руководством сайта, выросли на целых 10 %. «Мы добились настоящего успеха и были просто счастливы», – рассказывает Джейн. Теперь доля заказов,
Значение имеет лишь результат
Значение имеет лишь результат Мы давно вынашивали идею собрать в одном месте действительно гуру инфобизнеса России. Самых настоящих профессионалов и экспертов, которые могли бы поделиться своей уникальной информацией, опытом и навыками не только в области бизнеса,
Разные проекты – разный результат
Разные проекты – разный результат Эта книга наполнена особой энергией: энергией созидания, позитива и успеха. Она содержит слитки ценнейшей информации. Это мы вам гарантируем.Но как именно вы воспользуетесь этими слитками? Здесь никто вам гарантий дать не может. По
Результат здесь и сейчас
Результат здесь и сейчас Для последних 20 % клиентов, относящихся к третьей группе, цена не является приоритетом. Они принимают решение о покупке лишь потому, что у них есть проблема и ее необходимо решить как можно быстрее, здесь и сейчас. Таким клиентам обычно важна
2.1.7. Первый результат
2.1.7. Первый результат После конвертирования базы BIOLIFE.DB, которая содержит много текстовых данных в мемо поле и одно поле, которое мы игнорируем (image field), мы получили следующий результат (обратите внимание на заголовок, который показывает запись 1 из
Частичная специализация по виду аргумента шаблона
Частичная специализация по виду аргумента шаблона Одним из аспектов частичной специализации является возможность специализировать шаблон по виду аргумента, например, предоставить общую для всех указателей специализацию шаблона:template‹class T› class С { //…}; template‹class T› class
Симуляция частичной специализации по виду аргумента шаблона
Симуляция частичной специализации по виду аргумента шаблона Использовать полученную метафункцию IsPointer‹T› для симуляции частичной специализации по виду аргумента шаблона можно примерно следующим образом:// Реализация общего случая: T не является указателем. template‹class
Правило 37: Никогда не переопределяйте наследуемое значение аргумента функции по умолчанию
Правило 37: Никогда не переопределяйте наследуемое значение аргумента функции по умолчанию Давайте с самого начала упростим обсуждение. Есть только два типа функций, которые можно наследовать: виртуальные и невиртуальные. Но переопределять наследуемые невиртуальные
ПРИЛОЖЕНИЕ Д. УПРАВЛЕНИЕ ХОДОМ ВЫПОЛНЕНИЯ ПРОГРАММЫ
ПРИЛОЖЕНИЕ Д. УПРАВЛЕНИЕ ХОДОМ ВЫПОЛНЕНИЯ ПРОГРАММЫ Язык Си имеет несколько конструкций, предназначенных для управления выполнением программы. Здесь мы кратко описываем операторы циклов (while, for и do while), ветвлений (if, if else и switch) и переходов (goto, break и continue).
10.3.1. Проблема безопасности: программы без права выполнения
10.3.1. Проблема безопасности: программы без права выполнения Есть один хороший пример того, как обмануть неопытного пользователя, пытающегося защитить свои программы от несанкционированного запуска. Сброс бита выполнения файла еще не означает, что файл нельзя будет
Результат переименования
Результат переименования Убедимся, что нам понятен результат этого действия. Пусть класс SANTA_BARBARA имеет вид (оба унаследованных компонента foo в нем переименованы): Рис. 15.13. Устранение конфликта имен(Обратите внимание на графическое обозначение операции смены имен.)