用 Linux 中的示例解释 Bash Echo 命令

作为初学者,当您开始使用 Bash 脚本时,您可能会学习和使用的第一个命令是 echo 命令。 你可以想到 bash echo 命令类似于 print 其他编程语言中的命令。 这 echo 命令是一个 bash 内置,其目的是将输出打印到标准输出(即终端)。

在这篇文章中,我将向您展示什么是 bash echo 命令以及如何在 shell 脚本中使用它。 在我们进入主题之前,让我们看看 Bash 内置命令和外部命令之间的区别。

内容

  1. Bash 内置 echo 与外部 echo 命令
  2. 展示 bash echo 命令帮助
  3. echo 命令的结构
  4. 如何抑制换行符
  5. 不传递参数时会发生什么
  6. 使用变量和命令
  7. 使用单引号和双引号的影响
  8. 输出重定向和管道
  9. 多行字符串
  10. 反斜杠转义解释
    1. 换行符 – n
    2. 水平制表符 – t
    3. 垂直制表符 – v
    4. 抑制输出 – c
    5. 回车 – r
  11. 禁用反斜杠转义解释
  12. 结论

Bash 内置 echo 与外部 echo 命令

在 Linux 和其他类 Unix 系统中,一些命令作为内置命令和外部命令提供。 例如, /bin/echo 是一个与命令同名的外部命令 echo bash 内置。

当我们调用一个既作为内置命令又作为外部命令存在的命令时,通常默认执行内置命令。 因为,命令名称的优先顺序是 alias, 然后 function, 然后 builtin,然后在列出的目录中的外部命令 $PATH 为了。

如果要强制使用既可用作内置命令又可用作外部命令的外部命令,只需使用其完整路径即可。

为了清楚地说明这一点,以下命令调用 bash 内置:

$ echo <some-text>

和以下调用外部 echo 命令:

$ /bin/echo <some-text>

要找出命令是内置命令还是外部命令,我们可以使用 类型 命令:

$ type echo  echo is a shell builtin

要显示包含指定可执行文件的所有位置,请使用 -a 旗帜:

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

有关更多详细信息 type 命令用法,参考以下链接:

  • 带有初学者示例的 Type 命令教程

在本指南中,我们将讨论 bash 内置 echo 命令,而不是外部命令。

展示 bash echo 命令帮助

几乎所有 Linux 命令都有手册页或帮助部分来了解如何使用该命令。 的帮助手册 echo 命令包含在 Bash 手册页中

访问手册页 bash 命令,运行:

$ man bash

现在,输入 /echo 并按下 n 直到您看到帮助部分 echo 命令。

Bash echo 命令帮助

或者,您可以使用以下单行命令来显示帮助部分 echo 命令:

$人 bash | 少 --pattern='^ *echo +['

Structure of the echo command

The echo command accepts three optional arguments and the text to be printed to stdout.

echo [-neE] [arg ...]    -n → 不附加新行 -e → 启用反斜杠转义解释 -E → 禁用反斜杠转义解释(默认)

让我们暂时跳过三个可选参数,看看如何使用 echo 将文本打印到标准输出(终端)。

您可以直接在终端中运行以下代码段,也可以创建一个脚本文件然后运行它。 我将直接在终端中运行它:

$ echo "Hello World" Hello World
使用 echo 命令打印文本

看看上面的例子。 它是传统的 hello world 我们在学习任何新语言并将其作为第一个代码运行时运行的程序。 这 echo 这里的命令接受 "hello world" text 作为参数并将其打印到终端 (Stdout)。

如何抑制换行符

的默认行为 bash echo 命令是,它会自动添加一个新行(n)。 运行一样 hello world 再次编程并注意终端提示将显示在新行中。

$ echo "Hello world" Hello world

现在如果你想抑制这种行为,你可以使用 "-n" 将抑制新行的标志,终端提示将打印在同一行中,如下所示。

$ echo -n "Hello world" Hello world
用 echo 抑制换行符用 echo 抑制换行符

不传递参数时会发生什么

当没有参数传递给 echo 命令时,该命令不会失败,但会返回一个空的新行。 启动终端并运行 "echo" 你会看到它只是打印一个空行并退出。

$ echo
$ echo $?
0

您可以通过添加 "-n" 即使没有传递参数也不会打印换行符的标志。

$ echo -n 
不带任何选项运行 echo不带任何选项运行 echo

这将在哪里有用? 你可能想知道。 当您希望输出之间有一些空行时,您可以使用 echo 没有论据。

使用变量和命令

echo command 将解释作为参数传递的用户定义或 shell 变量并打印值。 看看下面的例子。

一、env变量 "SHELL" 传递给 echo 命令并打印变量的值。

# Environmental Variable:  $ echo " I am currently using ${SHELL}" I am currently using /bin/bash

二、用户自定义变量 "NAME" 传递给 echo 命令并将值打印到终端。

# User Defined Variable:  $ NAME="PoP_OS" $ echo "I am using ${NAME}" I am using PoP_OS

您还可以在参数中运行命令。 看看下面的例子,其中 "uname -r" 命令作为参数传递,命令被解释并打印输出。

$ echo "KERNEL_VERSION=$(uname -r)" KERNEL_VERSION=5.11.0-7620-generic
变量和命令扩展变量和命令扩展

使用单引号和双引号的影响

在前面的所有示例中,您可能已经注意到我在参数周围使用了双引号。 那么当参数没有用引号括起来时会发生什么? Echo Command 不会失败,您将获得相同的输出。

看看下面的例子。 我正在运行我在上一节中使用的相同命令,但没有引号,它打印输出没有任何错误。

$ echo I am using ${NAME} I am using Pop_OS
使用不带引号的 echo使用不带引号的 echo

作为一个好习惯,始终用引号将参数括起来。

如果参数是纯文本,则可以使用单引号或双引号。 但是如果你想运行任何命令或扩展参数中的任何变量,你应该使用双引号,而不是单引号。

单引号将阻止运行任何命令或扩展变量。 它只会将整个参数视为纯文本。

看下面的例子。 当我用单引号将参数括起来时,变量 "NAME" 不被解释和处理为文本。

# SINGLE QUOTES  $ echo 'I am using ${NAME}' I am using ${NAME}  # DOUBLE QUOTES  $ echo "I am using Linux ${NAME}" I am using Linux PoP_OS
使用带有单引号和双引号的 echo使用带有单引号和双引号的 echo

输出重定向和管道

如前所述, echo 命令默认将输出打印到标准输出(终端)。 当您编写 shell 脚本时,您可能会遇到存储脚本输出的情况 echo 命令到一个文件。 您可以使用 bash 重定向 操作员。

$ echo "Welcome to OSTechNix" > /tmp/op.log
$ cat /tmp/op.log Welcome to OSTechNix

建议阅读:

  • 用例子解释 Bash 重定向
  • Bash Heredoc 初学者教程

您还可以发送输出 echo 命令给 pipe 作进一步处理。

$ echo "I am using ${NAME}" I am using PoP_OS
$ echo "I am using ${NAME}" | grep -i -o POP PoP
echo 命令的管道输出echo 命令的管道输出

多行字符串

您的论点有时可能会产生不止一行。 您可以用双引号将 multiline 参数括起来,以打印考虑新行、制表符和空格的输出。

$ echo "This is Line 1
This is Line 2
This is Line 3"
使用 echo 命令传递多行字符串使用 echo 命令传递多行字符串

在某些情况下,虽然您的参数作为多行字符串传递,但您可能希望将其打印为单行。 在这种情况下,使用 "" 符号在每一行的末尾,所以下一行将与上一行继续。

$ echo "I am running  the echo command  again"

示例输出:

I am running the echo command again
使用 echo 命令在单行中打印多行字符串使用 echo 命令在单行中打印多行字符串

这并非专门针对 bash echo 命令。 您可以使用这种方法将非常大的命令生成到多行,以获得更好的可读性。

反斜杠转义解释

echo 命令接受许多转义字符作为参数。 为了让 echo 命令识别这些特殊字符, "-e" 标志应该通过。 您可以从 echo 命令的手册页。

支持的特殊字符列表支持的特殊字符列表

您不会在日常生活中使用所有特殊字符。 您将主要使用换行符、制表符和反斜杠转义字符。

换行符 – n

当您通过时将添加一个新行 necho 命令。 您还可以传递多个 n ,这将相应地添加更多行。

$ echo -e "This is the first linenThis is the second LinenThis is the third line"

示例输出:

This is the first line This is the second Line This is the third line

水平制表符 – t

什么时候 t 使用,它将添加制表符空间。 您还可以像下面那样组合多个转义字符。

$ echo -e "Enter the U_NAMEt:n" Enter the U_NAME    :

垂直制表符 – v

要垂直创建选项卡,请使用 v.

$ echo -e "Enter the usernamevEnter the password" Enter the username                   Enter the password

抑制输出 – c

什么时候 c 被使用,之后的任何东西 c 会被压制。

$ echo -e "I am using cCosmic Desktop" I am using

回车 – r

什么时候 r 使用时,光标将重置为第一个字符以及之后的任何字符 r 打印替换现有字符。

$ echo -e "I use Arch, rBtw" Btwse Arch, 

禁用反斜杠转义解释

的默认行为 echo 命令是它将特殊字符视为纯文本,除非 -e 标志通过。 通过使用可以实现相同的行为 -E 旗帜。

我将向您展示一个示例。

让我跑 echo 没有任何标志的命令:

$ echo "Welcome to OSTechNix nblog" Welcome to OSTechNix nblog

接下来,我运行相同的命令 -E 旗帜:

$ echo -E "Welcome to OSTechNix nblog" Welcome to OSTechNix nblog

如您所见,当我运行 echo 命令与 -E 标志和没有任何标志。 在这两种情况下, echo 命令处理 /n 特殊字符作为普通字符串。

现在让我再次运行相同的命令,但这次使用 -e 旗帜。

$ echo -e "Welcome to OSTechNix nblog"
Welcome to OSTechNix
blog

你发现区别了吗? echo 命令没有处理 /n 字符为纯文本,并显示后面的任何内容 /n 新行中的特殊字符。

因此,如果您想使用任何特殊字符,例如 n, t, v 等,你应该使用 -e 旗帜。 除此以外 echo 将所有内容视为普通字符串。

请允许我再举一个例子。

$ echo -e "Hello worldnHello WorldnHello World" Hello world Hello World Hello World

正如你在上面的输出中看到的, echo 命令显示 "Hello World" 串三遍,一个接一个(即换行)。

如果您只想转义特定的特殊字符怎么办? 这是哪里 双反斜杠 () 来救援。

比如我想逃出第三个 /n 上一个命令中的特殊字符。

为此,我将在第三个特殊字符前加上双反斜杠() 如下:

$ echo -e "Hello worldnHello WorldnHello World" Hello world Hello WorldnHello World

现在, echo 命令处理第三个 n 特殊字符作为普通字符串。

因此,当你有很多特殊字符而你只想转义一个特定的特殊字符时,你需要添加双反斜杠 () 在那个特殊字符前面。

结论

在这篇文章中,我们看到了什么 echo 命令是和使用它的不同方式。 这是一个非常简单的命令,不使用就没有shell脚本 echo 命令,除非您决定使用 printf 这是替代方案 echo 命令输入 bash.

相关阅读:

  • Bash 脚本——用例子解释变量
  • Bash 脚本——用例子解释函数
  • Bash 脚本——For 循环用例子解释
  • Bash 脚本——用例子解释 While 和 until 循环

BASHBash bulitinBash 脚本Bash 提示命令行echo 命令LinuxLinux 基础Linux 命令Linux howtoShell 脚本