#!/bin/bash
echo "Эта строка выводится внутренней командой \"echo\"."
/bin/echo "А эта строка выводится внешней командой the /bin/echo."
Ключевое слово (keyword) -- это зарезервированное слово, синтаксический элемент (token) или оператор. Ключевые слова имеют специальное назначение для командного интерпретатора, и фактически являются элементами синтаксиса языка командной оболочки. В качестве примера можно привести "for", "while", "do", "!", которые являются ключевыми (или зарезервированными) словами. Подобно встроенным командам , ключевые слова жестко зашиты в Bash, но в отличие от встроенных команд, ключевые слова не являются командами как таковыми, хотя при этом могут являться их составной частью [ 24 ] Исключение из правил -- команда time, которая в официальной документации к Bash называется ключевым словом.
.
Ввод/вывод
echo
выводит (на stdout ) выражение или содержимое переменной (см. Пример 4-1).
echo Hello
echo $a
Для вывода экранированных символов, echoтребует наличие ключа -e . См. Пример 5-2.
Обычно, командв echoвыводит в конце символ перевода строки. Подавить вывод это символа можно ключом -n .
Команда echoможет использоваться для передачи информации по конвейеру другим командам.
if echo "$VAR" | grep -q txt # if [[ $VAR = *txt* ]]
then
echo "$VAR содержит подстроку \"txt\""
fi
Кроме того, команда echo, в комбинации с подстановкой команд может учавствовать в операции присвоения значения переменной.
a=`echo "HELLO" | tr A-Z a-z`
См. так же Пример 12-15, Пример 12-2, Пример 12-32 и Пример 12-33.
Следует запомнить, что команда echo `command`удалит все символы перевода строки, которые будут выведены командой command .
Переменная $IFS обычно содержит символ перевода строки \n, как один из вариантов пробельного символа. Bash разобьет вывод команды command , по пробельным символам, на аргументы и передаст их команде echo, которая выведет эти аргументы, разделенные пробелами.
bash$ ls -l /usr/share/apps/kjezz/sounds
-rw-r--r-- 1 root root 1407 Nov 7 2000 reflect.au
-rw-r--r-- 1 root root 362 Nov 7 2000 seconds.au
bash$ echo `ls -l /usr/share/apps/kjezz/sounds`
total 40 -rw-r--r-- 1 root root 716 Nov 7 2000 reflect.au -rw-r--r-- 1 root root 362 Nov 7 2000 seconds.au
Это встроенная команда Bash и имеет внешний аналог /bin/echo .
bash$ type -a echo
echo is a shell builtin
echo is /bin/echo
printf
printf-- команда форматированного вывода, расширенный вариант команды echoи ограниченный вариант библиотечной функции printf() в языке C, к тому же синтаксис их несколько отдичается друг от друга.
printf format-string ... parameter ...
Это встроенная команда Bash. Имеет внешний аналог /bin/printf или /usr/bin/printf . За более подробной информацией обращайтесь к страницам справочного руководства man 1 printfпо системным командам.
Старые версии Bash могут не поддерживать команду printf.
Пример 11-1. printf в действии
#!/bin/bash
# printf demo
# От переводчика:
# Считаю своим долгом напомнить, что в качестве разделителя дробной и целой
# частей в вещественных числах, может использоваться символ "запятая"
# (в русских локалях), поэтому данный сценарий может выдавать сообщение
# об ошибке (у меня так и произошло) при выводе числа PI.
# Тогда попробуйте заменить в определении числа PI десятичную точку
# на запятую -- это должно помочь. ;-)
PI=3,14159265358979
DecimalConstant=31373
Message1="Поздравляю,"
Message2="Землянин."
echo
printf "Число пи с точностью до 2 знака после запятой = %1.2f" $PI
echo
printf "Число пи с точностью до 9 знака после запятой = %1.9f" $PI # Даже округляет правильно.
printf "\n" # Перевод строки,
printf "Константа = \t%d\n" $DecimalConstant # Вставлен символ табуляции (\t)
printf "%s %s \n" $Message1 $Message2
echo
# ==========================================#
# Эмуляция функции 'sprintf' в языке C.
# Запись форматированной строки в переменную.
echo
Pi12=$(printf "%1.12f" $PI)
echo "Число пи с точностью до 12 знака после запятой = $Pi12"
Msg=`printf "%s %s \n" $Message1 $Message2`
echo $Msg; echo $Msg
exit 0
Одно из полезных применений команды printf-- форматированный вывод сообщений об ошибках
Читать дальше