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
много других вариантов форматирования, более подробную информацию см. на страницах интерактивного справочного руководства к команде.
Читать дальше