Стандартный поток вывода
Собственно, сам командный язык bash не имеет механизма организации вывода данных. Среди встроенных в bash команд нет команды печати. Но зато можно воспользоваться командами Unix. Самой простой из них является команда echo, которая копирует свои аргументы в поток стандартного вывода. При этом объединять разные слова во фразу каким-либо образом не нужно:
bash>echo Perl meets CGI Perl meets CGI bash>
В данном случае echo вывела три своих аргумента и символ перевода строки — приглашение (prompt) bash находится на новой строке.
На первый взгляд, такое простое решение для стандартного вывода кажется примитивным. На самом деле, его вполне достаточно для генерации HTML-страниц. Механизмы, которые делают echo в совокупности с bash эффективным средством генерации отчетов в HTML-формате, таковы:
- подстановка переменных (substitution);
- маскирующие кавычки (quoting);
- подстановка результатов выполнения команд.
В совокупности они представляют собой мощный инструмент.
Substitution позволяет формировать строку вывода путем включения в нее значений переменных. Например, если нужно распечатать позиционные параметры скрипта, сделать это можно следующим образом:
echo first_arg#$1 second_arg#$2
В данном случае распечатываются первый и второй аргументы командной строки скрипта. Другой пример — распечатка переменной окружения:
echo QUERY_STRING:$QUERY_STRING
Quoting используется для маскирования специальных значений некоторых символов. Такие символы называют метасимволами. Например: ">" и "<" — это символы перенаправления потоков ввода-вывода и, следовательно, их надо маскировать при выводе. Для такого маскирования проще всего использовать простые одинарные кавычки:
echo '<H1>QUOTING</H1>'
В данном случае мы напечатаем заголовок первого уровня в HTML-документе. При маскировании следует помнить, что внутри кавычек bash не выполняет интерпретации кода скрипта, поэтому переменные внутрь одинарных кавычек вставлять нельзя:
echo '<H1>'$QUERY_STRING'</H1>'
В данном случае строка вывода будет состоять из трех частей: тега начала заголовка, значения переменной QUERY_STRING и тега конца заголовка.
Подстановка результата выполнения команды осуществляется с использованием обратных кавычек (традиционный вариант) или формы $ (command). При этом в строку вывода включается значение, которое возвращает выполненная команда:
echo '<H1>'`date`'</H1>'
или
echo '<H1>'$(date)'</H1>'
Таким образом можно вставлять не только отдельные команды, но и целые последовательности команд. Главное, чтобы эта последовательность что-нибудь возвращала.