Linux 中的 echo 命令用于显示作为参数传递的文本/字符串行。 这是一个内置命令。我们在写shell脚本shell 脚本和批处理文件,用于将状态文本输出到屏幕或文件。echo命令比较基础,但是功能还比较丰富。在本篇文章中,您将了解在 Linux 中使用 echo 命令的所有不同方式。

echo命令语法

Linux 中的 echo 命令用于显示用户提供的字符串。

echo [option] [string]

例如,我们使用自己实现的echo命令打印 Hello, World! 作为输出:

cmd echo输出命令结果 linux的echo输出命令详解_linux


除了基本用法,还可以配合一些选项使用。

  • echo命令选项:

使用 --help 参数列出所有可用的 echo 命令选项:

cmd echo输出命令结果 linux的echo输出命令详解_内置命令_02


注意:–e 在这里启用反斜杠转义的解释。

  • \b

它删除文本之间的所有空格

echo -e “Are \byou \bok”

cmd echo输出命令结果 linux的echo输出命令详解_linux_03

  • \c

使用退格解释器“-e”抑制尾随的新行以继续而不发出新行。

echo -e “Are \cyou ok”

cmd echo输出命令结果 linux的echo输出命令详解_cmd echo输出命令结果_04


在上面的例子中, \c 之后的文本不会被打印出来并且省略了尾随的新行。

  • \n

此选项从使用它的位置创建新行。

.echo -e “Are \nyou \nok”

cmd echo输出命令结果 linux的echo输出命令详解_内置命令_05

  • \t

此选项用于创建水平制表符空间。

echo -e “Are \tyou \tok”

cmd echo输出命令结果 linux的echo输出命令详解_echo命令_06

  • \r

使用退格解释器‘-e’回车以在输出中指定回车。

echo -e “Are \ryou ok”

cmd echo输出命令结果 linux的echo输出命令详解_内置命令_07

在上面的示例中,不会打印 \r 之前的文本。

  • \v

此选项用于创建垂直制表符空间。

echo -e “Are \vyou \vok”

cmd echo输出命令结果 linux的echo输出命令详解_cmd echo输出命令结果_08

  • echo *

该命令将打印所有文件/文件夹,类似于 ls 命令。

echo *

cmd echo输出命令结果 linux的echo输出命令详解_echo命令_09


echo 输出颜色文本

使用 ANSI 转义序列可以更改输出文本的颜色:

echo -e ‘\033[1;37mWHITE’
echo -e ‘\033[0;30mBLACK’
echo -e ‘\033[0;31mRED’
echo -e ‘\033[0;34mBLUE’
echo -e ‘\033[0;32mGREEN’

cmd echo输出命令结果 linux的echo输出命令详解_echo命令_10

可以使用以上命令输出彩色的文本。

echo 执行命令

如果我们想要输出uptime命令执行后的结果,我们可能会使用如下命令:

cmd echo输出命令结果 linux的echo输出命令详解_linux_11


对uptime命令不熟悉的,可以参考这篇文章Linux下系统运行时间(uptime)命令使用及代码实现

显示变量值

echo 命令还用于将变量值显示为输出。 例如,要显示当前用户的名称,请使用:

echo $USER

cmd echo输出命令结果 linux的echo输出命令详解_cmd echo输出命令结果_12

显示命令输出

echo 命令允许您在输出中包含其他命令的结果:

echo "[string] $([command])

例如,使用以下命令列出主目录中的所有文件和目录:

echo “Show current directory path: $(pwd)”

cmd echo输出命令结果 linux的echo输出命令详解_linux_13


写入文件

使用 > 或 >> 将字符串包含在文件的 echo 命令中,而不是将其显示为输出:

echo -e ‘Hello, World! \nThis is Minger!’ >> test.txt

cmd echo输出命令结果 linux的echo输出命令详解_linux_14


echo 简单实现

#include <stdio.h>
#include <assert.h>
#include <sys/types.h>
#include <ctype.h>

/* 十六进制字符转换为整数 */
static int hextobin (unsigned char c)
{
	switch (c)
	{
		default: return c - '0';
		case 'a': case 'A': return 10;
		case 'b': case 'B': return 11;
		case 'c': case 'C': return 12;
		case 'd': case 'D': return 13;
		case 'e': case 'E': return 14;
		case 'f': case 'F': return 15;
	}
}


int main(int argc, char **argv)
{
	bool do_v9 = false;
	bool display_return = true;

	--argc;
	++argv;
  
	while (argc > 0 && *argv[0] == '-')
	{
		char const *temp = argv[0] + 1;
		size_t i;

		/* 如果看起来我们正在处理选项,那么请确保
		所有指定的选项实际上都是有效的。 否则,
		字符串应该只是回显。  */

		for (i = 0; temp[i]; i++)
			switch (temp[i])
			{
				case 'e': 
				case 'E': 
				case 'n':
					break;
				default:
					goto just_echo;
			}

		if (i == 0)
		goto just_echo;

		/* temp 中的所有选项都是 ECHO 的有效选项。处理它们。  */
		while (*temp)
			switch (*temp++)
			{
				case 'e':
					do_v9 = true;
				break;

				case 'E':
					do_v9 = false;
				break;

				case 'n':
					display_return = false;
				break;
			}

		argc--;
		argv++;
	}

just_echo:

	if (do_v9)
	{
		while (argc > 0)
		{
			char const *s = argv[0];
			unsigned char c;

		while ((c = *s++))
		{
			if (c == '\\' && *s)
			{
				switch (c = *s++)
				{
					case 'a': c = '\a'; break;
					case 'b': c = '\b'; break;
					case 'c': return 0;
					case 'e': c = '\x1B'; break;
					case 'f': c = '\f'; break;
					case 'n': c = '\n'; break;
					case 'r': c = '\r'; break;
					case 't': c = '\t'; break;
					case 'v': c = '\v'; break;
					case 'x':
					{
						unsigned char ch = *s;
						
						if (! isxdigit (ch))
							goto not_an_escape;
						
						s++;
						c = hextobin(ch);
						ch = *s;
						
						if (isxdigit (ch))
						{
							s++;
							c = c * 16 + hextobin (ch);
						}
					}
					break;
					case '0':
						c = 0;
						
						if (! ('0' <= *s && *s <= '7'))
							break;
						
						c = *s++;
					break;
					case '1': case '2': case '3':
					case '4': case '5': case '6': case '7':
						c -= '0';
						if ('0' <= *s && *s <= '7')
							c = c * 8 + (*s++ - '0');
						
						if ('0' <= *s && *s <= '7')
							c = c * 8 + (*s++ - '0');
					break;
					case '\\': break;
					
					not_an_escape:
					default:  
						putchar ('\\'); 
					break;
				}
			}
			putchar (c);
		}

		argc--;
		argv++;
		if (argc > 0)
			putchar(' ');

		}
	}

	else
    {
		while (argc > 0)
        {
			fputs(argv[0], stdout);
			argc--;
			argv++;
			
			if (argc > 0)
				putchar (' ');
        }
    }

	if (display_return)
		putchar ('\n');

	return 0;
}

总结

echo 命令是一个内置的 Linux 功能,可将参数打印为标准输出。 echo 通常用于将文本字符串或命令结果显示为消息。