Путь: Toys/POSIX, команды версии: Ver.4 Ver.9
echo
Комментарии в файле echo.c :
usage: echo [-neE] [ARG...]
Запишите каждый аргумент в stdout, один пробел между ними, а затем новую строку.
-n Без завершающей новой строки
-E Печатать escape-последовательности буквально (по умолчанию)
-e Обрабатывать следующие escape-последовательности:
\\ Обратная косая черта \0NNN Восьмеричный (1-3 цифры) \xHH Шестнадцатеричный (1-2 цифры)
\a Оповещение (звуковой сигнал/мигание) \b Backspace \c Остановить здесь (нет \n)
\f Подача страницы \n Новая строка \r Возврат каретки
\t Горизонтальная вкладка \v Вертикальная вкладка
usage: echo [-neE] [ARG...]
Write each argument to stdout, one space between each, followed by a newline.
-n No trailing newline
-E Print escape sequences literally (default)
-e Process the following escape sequences:
\\ Backslash \0NNN Octal (1-3 digit) \xHH Hex (1-2 digit)
\a Alert (beep/flash) \b Backspace \c Stop here (no \n)
\f Form feed \n Newline \r Carriage return
\t Horizontal tab \v Vertical tab
Исходный текст в файле echo.c
#define FOR_echo
#include "toys.h"
void echo_main(void)
{
int i = 0;
char *arg, *c, out[8];
while ((arg = toys.optargs[i])) {
if (i++) putchar(' ');
// Should we output arg verbatim?
if (!FLAG(e)) {
xprintf("%s", arg);
continue;
}
// Handle -e
for (c = arg; *c; ) {
unsigned u;
if (*c == '\\' && c[1] == 'c') return;
if ((u = unescape2(&c, 1))<128) putchar(u);
else printf("%.*s", (int)wcrtomb(out, u, 0), out);
}
}
// Output "\n" if no -n
if (!FLAG(n)) putchar('\n');
}