Строка формата очень похожа с некоторыми ограничениями на применяемую в языках программирования С и С++. Главным образом не поддерживаются числа с плавающей точкой, поскольку все арифметические операции в командной оболочке выполняются над целыми числами. Строка формата состоит из произвольной комбинации литеральных символов, escape-последовательностей и спецификаторов преобразования. Все символы строки формата, отличающиеся от \ и %, отображаются на экране при выводе.
В табл. 2.7 приведены поддерживаемые командой escape-последовательности.
| 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.
| Символ преобразования | Описание |
|---|---|
D | Вывод десятичного числа |
С | Вывод символа |
S | Вывод строки |
% | Вывод знака % |
Строка формата используется для интерпретации остальных параметров команды и вывода результата, как показано в следующем примере:
$ printf "%s\n" hello
hello
$ printf "%s %d\t%s" "Hi There" 15 people
Hi There 15 people
Обратите внимание на то, что для защиты строки Hi There и превращения ее в единый параметр, строку нужно заключить в кавычки ("").
Команда return служит для возврата значений из функций, как уже упоминалось ранее при обсуждении функций. Команда принимает один числовой параметр, который становится доступен в сценарии, вызывающем функцию. Если параметр не задан, команда return по умолчанию возвращает код завершения последней команды.
Команда set задает переменные-параметры командной оболочки. Она может быть полезна при использовании полей в командах, выводящих значения, разделенные пробелами.
Предположим, что вы хотите использовать в сценарии название текущего месяца. В системе есть команда date, содержащая название месяца в виде строки, но нужно отделить его от других полей. Это можно сделать с помощью комбинации команды set и конструкции $(...), которые обеспечат выполнение команды date и возврат результата (более подробно об этом
#!/bin/sh
echo the date is $(date)
set $(date)
echo The month is $2
exit 0
Программа задает список параметров для вывода команды date и затем использует позиционный параметр $2 для получения названия месяца.
Мы использовали команду date только как простой пример, демонстрирующий, как извлекать позиционные параметры. Поскольку команда date зависит от языковых параметров или локализации, в действительности мы бы извлекли название месяца командой date +%B. У команды date много других вариантов форматирования, более подробную информацию см. на страницах интерактивного справочного руководства к команде.
Команду set можно также применять для передачи параметров командной оболочке и тем самым управления режимом ее работы. Наиболее часто используемый вариант команды set -х, который заставляет сценарий выводить на экран трассировку выполняемой в данный момент команды. Мы обсудим команду set и ее дополнительные опции позже в этой главе, когда будем рассматривать отладку программ.