在Bash Shell中的Echo命令:发现其多种用途

作为管理员,在管理Linux系统时,您可能会经常在Bash中运行echo命令。但是,打印文本是echo命令能提供的全部吗?

在本教程中,您将仔细研究echo命令,并学习一些其最有用的实际示例。

准备好了吗?请继续关注,重新塑造您对echo命令的理念!

先决条件

本教程包括实际演示。要跟着操作,您只需要一台Ubuntu机器。本教程使用Ubuntu 20.04,但其他Linux发行版也将适用。

使用Bash Shell的echo命令打印字符串

当您考虑echo命令时,首先想到的可能是将字符串值打印到控制台。是的,echo命令直接从命令或脚本中返回字符串。

但是在本教程的后面,您将以不同的视角看待echo命令。现在,看看这个命令如何将字符串输出到控制台。

echo命令的语法如下,其中:

  • string – 要打印的文本。
  • options – 您可以指定以修改输出的可选参数。
echo string options

运行下面的echo命令,不添加选项,以在控制台打印简单文本。此命令将字符串作为参数传递给echo命令。

echo "Echo command bash"
Printing a string to the console

抑制字符串中的尾随换行符

echo命令默认在每个字符串末尾添加换行符。因此,当您打印多个字符串时,可能会将一个字符串连接到另一个字符串,每个字符串都会打印在新的一行。

使用-n选项可以抑制尾随的换行符,告诉echo命令将多个字符串打印在单行上。例如,在将进度条打印到控制台时,此选项可能很有帮助。

运行以下命令以打印进度:和50%。

echo -n "Progress: " && echo "50%"

如下所示,您可以看到换行符将这两个字符串分隔开。

echo command bash : newlines separate the two strings

现在,运行以下命令,并附加-n选项,以打印字符串进度:和50%。

echo -n "Progress: " && echo "50%"

如下所示,由于您使用了-n选项来抑制换行符,现在两个字符串都在单行上。

Suppressing trailing newlines

打印变量值

编写脚本时,通常会将值临时存储到变量中,然后可以使用echo命令打印该值。在调试shell脚本时,检查变量的值可能会很有帮助。

运行以下命令将数字变量的值设置为10,并将该值打印(echo)到控制台。

# 将值10存储到数字变量中
number=10
# 打印存储在数字变量中的当前值
echo The number is $number
Printing the Value of a Variable

解释转义序列

转义序列是表示特殊字符的一系列字符,您可以使用-e选项来解释转义序列。

例如,\t 转义序列代表一个制表符。如果你使用 -e 选项并将 \t 打印到控制台,\t 将被解释为制表符,而不是被直接打印。

一些最常见的转义序列如下:

Escape Sequence Function
\b backspace
\t tab
\n new line
\\ backslash
\$ dollar sign

运行以下命令以将 Hello\tWorld 打印到控制台。

echo "Hello\tWorld"

你可以看到下面,echo 命令将字符串 Hello\tWorld 原样打印了出来。

Printing a string without an escape sequence

现在,运行下面的命令以打印 Hello\tWorld,并在其中添加 -e 选项以解释 \t 为制表符。

echo -e "Hello\tWorld"

请注意下面单词 Hello 和 World 之间的巨大间隔。

Interpreting an escape sequence

将字符串插入到新行

打印一个长的单行字符串会让用户很难阅读其全部内容。幸运的是,\n 选项允许你在字符串中间添加换行符。当在控制台打印多行文本时,这个选项经常被使用,它让实际文本更清晰。

运行下面的命令以打印字符串 Echo command bash\nAnother line,其中 \n 选项将字符串分成两行。

echo -e "Echo command bash\nAnother line"

下面,你可以看到 \n 选项将字符串 Another line 放到了新行。

Inserting a string into a new line

在字符串之间插入垂直制表符

你已经看到 \t 转义序列将字符串之间放置了水平制表符。但是垂直制表符呢?\v 选项允许你在垂直制表符中分隔字符串,非常适合制作文本横幅。

当在控制台打印多列文本时,经常使用这个选项,每列都在新行上,并在开头有一个新的制表符空格。

运行以下命令以打印文本 Echo command bash demo,但在每个单词之间使用垂直制表符(\v)。

echo -e "Echo \vcommand \vbash \vdemo
Inserting vertical tabs in between strings

基于扩展名打印文件名

如果您想要找到具有特定文件类型的文件的方法,echo 命令的此功能起到相同的作用。echo 命令支持使用通配符字符 (*) 在目录中列出具有特定扩展名的文件。

1. 运行以下命令以打印当前目录中以 .txt 扩展名结尾的所有文件。

echo *.txt
Printing all .txt files in the current directory

2. 接下来,运行以下命令以打印当前目录中以 .deb 文件扩展名结尾的所有文件。

echo *.deb
Printing all .deb files in the current directory

3. 最后,运行以下命令以打印 ~/Downloads 目录中具有 .txt 扩展名的文件。您可以将 ~/Downloads/ 替换为您文件的实际目录路径。

echo ~/Downloads/*.txt

您可以看到,echo 命令支持指定您文件所在的目录路径。

Finding .txt files in the specific directory

将输出写入文件

当你的命令返回大量输出时,在控制台上几乎无法阅读所有内容。将输出写入文件是个好主意。但是如何做呢?除了将文本打印到控制台外,echo命令还支持直接将输出写入文件。

运行下面的命令,由于输出被写入(>)到一个名为echo-bash.txt 的文件中,因此不会提供输出。

请注意,如果echo-bash.txt文件已经存在,它将被新内容覆盖。

echo "echo command bash" > echo-bash.txt

现在,运行以下cat命令来查看echo-bash.txt文件的内容。

cat echo-bash.txt

正如你下面所见,echo命令的输出被写入echo-bash.txt文件中。

Verifying the output written to file

追加输出到现有文件

如前所述,>运算符用新内容覆盖现有文件。但是如果你希望将输出追加到现有文件而不是覆盖它呢?

不要使用单个>运算符,而是使用两个>>。这个特性可以帮助保留现有内容,并将新条目追加到文件末尾。

运行下面的命令,将新文本(追加文本)追加(>>)到现有的echo-bash.txt文件中。

echo "Appending text" >> echo-bash.txt

现在,运行以下cat命令来查看echo-bash.txt文件的内容。

cat echo-bash.txt

正如你下面所见,echo命令的输出被追加到文件中,而不会覆盖任何内容。

Appending output to an existing file

结论

echo 命令在 bash shell 中是一个简单但功能强大的工具,可以以多种方式使用。在本教程中,您已经学会如何通过一些最流行的选项来最大化 echo 命令的潜力。

将文本打印到控制台不再仅仅是“打印文本”了。您已经了解如何将输出写入文件、追加输出,并更改每个打印文本的外观。

为什么不选择一些您可以使用 echo 命令的方式,并将它们写入您的 脚本 中呢?看看您能想出什么创造性的方法!

Source:
https://adamtheautomator.com/echo-command-in-bash/