作为初学者,当您开始使用 Bash 脚本时,您可能会学习和使用的第一个命令是 echo
命令。 你可以想到 bash echo 命令类似于 print
其他编程语言中的命令。 这 echo
命令是一个 bash 内置,其目的是将输出打印到标准输出(即终端)。
在这篇文章中,我将向您展示什么是 bash echo 命令以及如何在 shell 脚本中使用它。 在我们进入主题之前,让我们看看 Bash 内置命令和外部命令之间的区别。
内容
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
命令。
或者,您可以使用以下单行命令来显示帮助部分 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
看看上面的例子。 它是传统的 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 $?
0
您可以通过添加 "-n"
即使没有传递参数也不会打印换行符的标志。
$ echo -n
这将在哪里有用? 你可能想知道。 当您希望输出之间有一些空行时,您可以使用 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
作为一个好习惯,始终用引号将参数括起来。
如果参数是纯文本,则可以使用单引号或双引号。 但是如果你想运行任何命令或扩展参数中的任何变量,你应该使用双引号,而不是单引号。
单引号将阻止运行任何命令或扩展变量。 它只会将整个参数视为纯文本。
看下面的例子。 当我用单引号将参数括起来时,变量 "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
命令默认将输出打印到标准输出(终端)。 当您编写 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
多行字符串
您的论点有时可能会产生不止一行。 您可以用双引号将 multiline 参数括起来,以打印考虑新行、制表符和空格的输出。
$ echo "This is Line 1
This is Line 2
This is Line 3"
在某些情况下,虽然您的参数作为多行字符串传递,但您可能希望将其打印为单行。 在这种情况下,使用 ""
符号在每一行的末尾,所以下一行将与上一行继续。
$ echo "I am running the echo command again"
示例输出:
I am running the echo command again
这并非专门针对 bash echo
命令。 您可以使用这种方法将非常大的命令生成到多行,以获得更好的可读性。
反斜杠转义解释
这 echo
命令接受许多转义字符作为参数。 为了让 echo 命令识别这些特殊字符, "-e"
标志应该通过。 您可以从 echo
命令的手册页。
您不会在日常生活中使用所有特殊字符。 您将主要使用换行符、制表符和反斜杠转义字符。
换行符 – n
当您通过时将添加一个新行 n
到 echo
命令。 您还可以传递多个 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 脚本