printf
Команда printfесть только в современных командных оболочках. Группа X/Open полагает, что ее следует применять вместо команды echoдля генерации форматированного вывода, несмотря на то, что, кажется, лишь немногие следуют этому совету.
У команды следующая синтаксическая запись.
printf "строка формата" параметр1 параметр2 ...
Строка формата очень похожа с некоторыми ограничениями на применяемую в языках программирования С и С++. Главным образом не поддерживаются числа с плавающей точкой, поскольку все арифметические операции в командной оболочке выполняются над целыми числами. Строка формата состоит из произвольной комбинации литеральных символов, escape-последовательностей и спецификаторов преобразования. Все символы строки формата, отличающиеся от \и %, отображаются на экране при выводе.
В табл. 2.7 приведены поддерживаемые командой escape-последовательности.
Таблица 2.7
| Escape-последовательность |
Описание |
\" |
Двойная кавычка |
\\ |
Символ обратный слэш |
\a |
Звуковой сигнал тревоги (звонок колокольчика или прерывистый звуковой сигнал) |
\b |
Символ Backspace (стирание слева) |
\c |
Отбрасывание последующего вывода |
\f |
Символ Form feed (подача бумаги) |
\n |
Символ перехода на новую строку |
\r |
Возврат каретки |
\t |
Символ табуляции |
\v |
Символ вертикальной табуляции |
\ooo |
Один символ с восьмеричным значением ooo |
\xHH |
Один символ с шестнадцатеричным значением HH |
Спецификаторы преобразований довольно сложны, поэтому мы приведем наиболее распространенные варианты их применения. Более подробную информацию можно найти в интерактивном справочном руководстве командной оболочки bash или на страницах раздела 1 интерактивного руководства к команде printf( man 1 printf). (Если вы не найдете нужных сведений в разделе 1, попробуйте поискать в разделе 3.) Спецификатор преобразования состоит из символа %, за которым следует символ преобразования. Основные варианты преобразований перечислены в табл. 2.8.
Таблица 2.8
| Символ преобразования |
Описание |
D |
Вывод десятичного числа |
С |
Вывод символа |
S |
Вывод строки |
% |
Вывод знака % |
Строка формата используется для интерпретации остальных параметров команды и вывода результата, как показано в следующем примере:
$ printf "%s\n" hello
hello
$ printf "%s %d\t%s" "Hi There" 15 people
Hi There 15 people
Обратите внимание на то, что для защиты строки Hi Thereи превращения ее в единый параметр, строку нужно заключить в кавычки ( "").
return
Команда returnслужит для возврата значений из функций, как уже упоминалось ранее при обсуждении функций. Команда принимает один числовой параметр, который становится доступен в сценарии, вызывающем функцию. Если параметр не задан, команда returnпо умолчанию возвращает код завершения последней команды.
set
Команда setзадает переменные-параметры командной оболочки. Она может быть полезна при использовании полей в командах, выводящих значения, разделенные пробелами.
Предположим, что вы хотите использовать в сценарии название текущего месяца. В системе есть команда date, содержащая название месяца в виде строки, но нужно отделить его от других полей. Это можно сделать с помощью комбинации команды setи конструкции $(...), которые обеспечат выполнение команды dateи возврат результата (более подробно об этом см. далее ). В выводе команды date строка с названием месяца — второй параметр.
#!/bin/sh
echo the date is $(date)
set $(date)
echo The month is $2
exit 0
Программа задает список параметров для вывода команды dateи затем использует позиционный параметр $2для получения названия месяца.
Мы использовали команду dateтолько как простой пример, демонстрирующий, как извлекать позиционные параметры. Поскольку команда dateзависит от языковых параметров или локализации, в действительности мы бы извлекли название месяца командой date +%B. У команды dateмного других вариантов форматирования, более подробную информацию см. на страницах интерактивного справочного руководства к команде.
Читать дальше