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, к тому же синтаксис их несколько отдичается друг от друга.
printfformat-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 -- форматированный вывод сообщений об ошибках
E_BADDIR=65
var=nonexistent_directory
error()
{
printf "$@" >&2
# Форматированный вывод аргументов на stderr.
echo
exit $E_BADDIR
}