Linux中的echo命令
1. 概述
在 Linux 中,echo是最基本和最广泛使用的命令之一。在本教程中,我们将通过示例学习echo命令及其选项。
2. 哪个echo命令?
大多数现代 Linux 发行版都将 bash作为其默认 shell。大多数 shell将echo实现为内置命令——包括bash、zsh、csh 和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"