Contents

Linux中的echo命令

1. 概述

在 Linux 中,echo是最基本和最广泛使用的命令之一。在本教程中,我们将通过示例学习echo命令及其选项。

2. 哪个echo命令?

大多数现代 Linux 发行版都将 bash作为其默认 shell。大多数 shell将echo实现为内置命令——包括bashzshcsh 和ksh。因此,例如 ,当我们在 bash 中 时, echo命令可作为内置的 shell 使用。

在本文中,我们将重点介绍bash内置的echo命令。

GNU coreutils 包中还有另一个echo 命令,它也适用于所有 Linux 发行版。

当我们在终端中工作时,在大多数情况下,我们会使用内置的echo

要查看这两个 echo命令,我们可以使用另一个内置命令:使用*-a*选项键入:

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo

3. echo命令介绍

echo命令将文本写入标准输出 (stdout)。

使用 echo命令的语法非常简单:

echo [OPTIONS] STRING...

例如:

$ echo "Hello World from the echo command"         
Hello World from the echo command

echo命令的一些常见用法是通过管道将 shell 变量传递给其他命令,在 shell 脚本中将文本写入标准输出,以及将文本重定向到文件。

我们将在后面的部分中看到更多echo命令的示例。

4. 打印变量值

echo 的日常使用是显示环境变量的值:

$ echo $JAVA_HOME
/usr/lib/jvm/default

**如果我们将 shell 变量用双引号括起来,则echo命令将打印变量的值。**如果我们不想将变量转换为它的值,我们可以转义美元 ( $ ) 符号:

$ echo "\$JAVA_HOME : $JAVA_HOME"
$JAVA_HOME : /usr/lib/jvm/default

作为转义美元符号的替代方法,我们可以将字符串用单引号括起来。这是因为单引号中的 shell 变量不会被扩展

$ echo '$JAVA_HOME :' $JAVA_HOME  
$JAVA_HOME : /usr/lib/jvm/default

5. 打印命令的输出

如果我们将命令替换 放在双引号内,则 echo命令将打印命令执行的输出

$ echo "My Linux booted at $(uptime -s)"
My Linux booted at 2020-02-14 10:41:50

6. 省略尾随换行符

**默认情况下,echo命令将在字符串末尾输出一个换行符。*我们可以 使用-n选项告诉echo*省略尾随的换行符:

itcodingman@blogdemo:/tmp$ echo -n "Some text without trailing newline*"
Some text without trailing newline*itcodingman@blogdemo:/tmp$

正如我们在上面的输出中看到的那样,由于缺少尾随换行符,因此在echo命令的输出之后立即出现提示。

使用echo和这个*-n*选项清空文件而不删除它也很方便:

$ echo -n "" > /tmp/boot_history.txt
$ file /tmp/boot_history.txt
/tmp/boot_history.txt: empty

7. 打印反斜杠转义字符

首先,让我们看另一个例子:

$ echo "Line 1\nLine 2\nLine 3\nvtab1\vvtab2\vvtab3"
Line 1\nLine 2\nLine 3\nvtab1\vvtab2\vvtab3

在上面的文本中,有反斜杠转义字符。默认情况下,  echo命令将按字面意思打印它们。 如果我们将 -e选项传递给 echo命令,它将解释以下反斜杠转义字符

  • \ – 显示反斜杠字符
  • \a – 警报 (BEL)
  • \b – 显示退格字符
  • \c - 抑制任何进一步的输出
  • \e – 显示转义字符
  • \f – 显示换页符
  • \n – 显示换行符
  • \r – 显示回车
  • \t – 显示水平制表符
  • \v – 显示垂直制表符

现在,让我们将*-e选项传递给echo*,看看它会给我们带来什么:

$ echo -e "Line 1\nLine 2\nLine 3\nvtab1\vvtab2\vvtab3"
Line 1
Line 2
Line 3
vtab1
     vtab2
          vtab3

除了输出那些反斜杠转义的字符外,我们可以通过将 ANSI 转义序列 传递给echo命令以颜色输出文本:

$ echo -e "\033[0;32mINFO In Green \033[0m"
$ echo -e "\033[0;33mWARN In Yellow \033[0m"
$ echo -e "\033[0;31mERROR In Red \033[0m"

如果我们执行上面的命令,我们将看到以下输出: /uploads/echo_command/1.png