English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В предыдущей главе мы изучили команду echo в Shell, в этой главе мы рассмотрим другую команду вывода Shell - printf.
Команда printf имитирует функцию printf() из библиотеки программного обеспечения C.
printf определен стандартом POSIX, поэтому скрипты, использующие printf, лучше переносятся, чем те, которые используют echo.
printf использует текст в кавычках или параметры, разделенные пробелами, внешне можно использовать форматированные строки, можно также определить ширину строки, способ выравнивания и т.д. По умолчанию printf не добавляет символ перевода строки, как echo, поэтому мы можем вручную добавить \n.
printf команды грамматика:
printf format-string [arguments...]
参数说明:
format-string: является строкой форматирования
arguments: является списком параметров.
$ echo "Привет, Shell" Привет, Shell $ printf "Привет, Shell\n" Привет, Shell $
Далее, я покажу вам мощные функции printf с помощью скрипта:
#!/bin/bash # author:базовый учебник # url:ru.oldtoolbag.com printf "%%-10s %%-8s %%-4s\n" Имя Пол Весkg printf "%%-10s %%-8s %%-4.2f\n" Гу Цзин Муж 66.1234 printf "%%-10s %%-8s %%-4.2f\n" Яо Чжэ Муж 48.6543 printf "%%-10s %%-8s %%-4.2f\n" Гу Фу Жен 47.9876
Выполнение скрипта, результат вывода следующий:
Имя Пол Весkg Гу Цзин Муж 66.12 Яо Чжэ Муж 48.65 Гу Фу Жен 47.99
%s %c %d %f все они являются символами форматирования,%%s вывод одной строки,%%d вывод целого числа,%%c вывод одного символа,%%f вывод реального числа, в виде десятичной дроби.
%%-10s указывает на ширину 10 символов (- означает выравнивание влево, без него означает выравнивание вправо), любой символ будет отображаться в 10 символьной ширине, если недостаточно, автоматически заполняется пробелами, если больше, то отображается все содержимое.
%%-4.2f указывает на форматирование в виде десятичной дроби, где .2 Указывает на сохранение 2 знаков после запятой.
#!/bin/bash # author:базовый учебник # url:ru.oldtoolbag.com # format-string в двойных кавычках # printf "%%d %%s\n" 1 "abc" # Эффект одинарных и двойных кавычек одинаковый # printf '%d %%s\n' 1 "abc" # Без кавычек также можно выводить printf %%s abcdef # Формат указан только один параметр, но дополнительные параметры все равно будут выводиться по этому формату, format-string повторяется printf %%s abc def printf "%%s\n" abc def printf "%%s %%s %%s\n" a b c d e f g h i j # Если нету arguments,то %%s заменяется на NULL,%%d заменяется на 0 printf "%%s %%d \n"
Выполнение скрипта, результат вывода следующий:
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j и 0
Сerie | Описание |
---|---|
\a | Вспомогательный символ, обычно символ BEL ASCII |
\b | Отступ |
\c | Отключение вывода всех символов перевода строки в конце результата (только для параметров строк под контролем %b) |
\f | Перенос страницы (formfeed) |
\n | Перенос строки |
\r | Возврат каретки (Carriage return) |
\t | Горизонтальный табулятор |
\v | Вертикальный табулятор |
\\ | Лiteral обратный слеш |
\ddd | Представление символов восьмеричного значения от 1 до 3 знаков. Действительно только в строке формата |
\0ddd | Представление символов восьмеричного значения от 1 до 3 знаков |
$ printf "a string, no processing:<%s>\n" "A\nB" a string, no processing:<A\nB> $ printf "a string, no processing:<%b>\n" "A\nB" a string, no processing:<A B> $ printf "ru.oldtoolbag.com \a" ru.oldtoolbag.com $ #не переводить