MyTetra Share
Делитесь знаниями!
Особенность вывода на консоль через echo
Время создания: 28.10.2022 09:09
Автор: xintrea
Текстовые метки: linux, echo, особенности
Раздел: Компьютер - Linux - Bash - Программирование на Bash
Запись: xintrea/mytetra_syncro/master/base/1666937355c122wieabf/text.html на raw.github.com

Недавно осознал, что оказывается, в Linux имеется два echo.


Первое echo - это встроенная в шелл команда. Второе echo - это бинарник /bin/echo из состава GNU coreutils.


Для встроенной команды Bash описание выглядит следующим образом:



$ help echo

echo: echo [-neE] [аргумент ...]

Write arguments to the standard output.

Display the ARGs, separated by a single space character and followed by a

newline, on the standard output.

Options:

-n do not append a newline

-e enable interpretation of the following backslash escapes

-E explicitly suppress interpretation of backslash escapes


`echo' interprets the following backslash-escaped characters:

\a alert (bell)

\b backspace

\c suppress further output

\e escape character

\E escape character

\f form feed

\n new line

\r carriage return

\t horizontal tab

\v vertical tab

\\ backslash

\0nnn the character whose ASCII code is NNN (octal). NNN can be

0 to 3 octal digits

\xHH the eight-bit character whose value is HH (hexadecimal). HH

can be one or two hex digits

\uHHHH the Unicode character whose value is the hexadecimal value HHHH.

HHHH can be one to four hex digits.

\UHHHHHHHH the Unicode character whose value is the hexadecimal value

HHHHHHHH. HHHHHHHH can be one to eight hex digits.


Exit Status:

Returns success unless a write error occurs.



Для бинарника /bin/echo документация выглядит так:



$ man echo

NAME

echo - display a line of text


SYNOPSIS

echo [SHORT-OPTION]... [STRING]...

echo LONG-OPTION


DESCRIPTION

Echo the STRING(s) to standard output.


-n do not output the trailing newline

-e enable interpretation of backslash escapes

-E disable interpretation of backslash escapes (default)

--help display this help and exit

--version

output version information and exit

If -e is in effect, the following sequences are recognized:

\\ backslash

\a alert (BEL)

\b backspace

\c produce no further output

\e escape

\f form feed

\n new line

\r carriage return

\t horizontal tab

\v vertical tab

\0NNN byte with octal value NNN (1 to 3 digits)

\xHH byte with hexadecimal value HH (1 to 2 digits)


NOTE: your shell may have its own version of echo, which usually

supersedes the version described here. Please refer to

your shell's documentation for details about the options

it supports.



Здесь видно отличие: например, у бинарника есть опции --help, --version, которых нет у шелловской версии (они ей и не нужны, ибо это часть шелла). В свою очередь, у шелловского echo есть опции, которых нет в бинарной версии:



  • \E - дублирует опцию \e
  • \uHHHH - вывод символа Unicode (короткий код из 4-х HEX-цифр)
  • \UHHHHHHHH - вывод символа Unicode (длинный код из 8 HEX-цифр)



Интересно, что для бинарной версии помощь, в отличие от man-страницы, интернационализирована:



$ /bin/echo --help

Использование: /bin/echo [КОРОТКИЙ-ПАРАМЕТР]… [СТРОКА]…

или: /bin/echo ДЛИННЫЙ-ПАРАМЕТР

Печатает СТРОКУ(СТРОКИ) на стандартный вывод.


-n не печатать завершающий перевод строки

-e интерпретировать управляющие последовательности

-E не интерпретировать управляющие последовательности

(по умолчанию)

--help показать эту справку и выйти

--version показать информацию о версии и выйти



Если задействован параметр -e, то распознаются следующие последовательности:


\\ обратная косая черта

\a звуковой сигнал (BEL)

\b забой

\c подавить дальнейший вывод

\e экранирование (escape)

\f новая страница

\n новая строка

\r возврат каретки

\t горизонтальная табуляция

\v вертикальная табуляция

\0NNN байт с восьмеричным значением ННН (от 1 до 3 цифр)

\xHH байт с шестнадцатеричным значением HH (от 1 до 2 цифр)


ЗАМЕЧАНИЕ: ваша оболочка может включать свою версию echo, которая,

обычно, заменяет версию, описанную здесь. Пожалуйста, обратитесь к

документации по оболочке, чтобы узнать, какие параметры она

поддерживает.


Страница справки по GNU coreutils: <https://www.gnu.org/software/coreutils/>

Об ошибках в переводе сообщений сообщайте по

адресу <https://translationproject.org/team/ru.html>

Полная документация: <https://www.gnu.org/software/coreutils/echo>

или доступная локально: info '(coreutils) echo invocation'



Естественно, по-умолчанию всегда используется встроенная в шелл команда echo. Если же написать путь до бинарника /bin/echo, то будет использоваться именно бинарник. Увидеть различия в интерпретации опций можно следующими командами:



$ echo -e \\u2320\\n\\u2321

$ /bin/echo -e \\u2320\\n\\u2321

\u2320

\u2321



Не знаю, зачем и кому может пригодиться эта информация о двух разных echo. Но как минимум это знание показывает, как устроены ОС и как могут перекрываться имена команд, вызываемых из консоли.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования