Linux Bash 中的 Here Document 和 Here String


介绍

Bash 是一种 Unix shell 和命令语言,常用在 Linux 和其他基于 Unix 的操作系统中。它是一个强大的工具,用于自动化任务、管理系统配置以及在基于 Unix 的系统上执行各种其他操作。Bash 提供了一些特性,使其成为用户强大而灵活的工具,包括对“Here Documents”和“Here Strings”的支持。

什么是“Here Document”?

“Here Document”,也称为“here doc”,是一种特殊的输入重定向类型,允许用户为命令指定多行输入。这对于将长文本块或脚本代码指定为命令的输入特别有用。

Here Documents 使用 << 运算符后跟分隔符来指定,分隔符可以是任何字符串。然后在分隔符之后指定输入行,并以仅包含分隔符的行(后跟分号;)终止。例如,以下命令使用 Here Document 为cat 命令指定多行输入:

$ cat <<EOF
This is line 1 of the input.
This is line 2 of the input.
This is line 3 of the input.
EOF

在这个例子中,分隔符是“EOF”(代表“文件结束”)。输入行在分隔符和仅包含分隔符的终止行之间指定。执行命令时,cat 命令读取输入并将其显示在屏幕上。

“Here Documents”还可以用于为接受脚本代码作为输入的命令指定输入,例如awkperl。例如,以下命令使用 Here Document 为awk 命令指定一个脚本:

$ awk '{print $1}' <<EOF
This is line 1 of the input.
This is line 2 of the input.
This is line 3 of the input.
EOF

在这个例子中,awk 命令将读取输入并执行在 Here Document 中指定的脚本,该脚本只打印每一行输入的第一个字段(例如列)。

什么是 Here String?

“Here String”类似于 Here Document,但它使用单引号 (') 而不是双小于号 (<<) 符号。与“Here Document”一样,“Here String”允许用户为命令指定多行输入。但是,“Here String”被解释为单个字符串,而不是多行输入。

“Here Strings”使用单引号后跟分隔符来指定,分隔符可以是任何字符串。然后在分隔符之后指定字符串,并以仅包含分隔符的行(后跟单引号)终止。例如,以下命令使用 Here String 为echo 命令指定一个多行字符串:

$ echo 'This is a string
that spans multiple
lines.'

在这个例子中,分隔符是单引号本身。字符串在分隔符和仅包含分隔符的终止行之间指定。执行命令时,echo 命令读取输入并将其作为单个字符串显示在屏幕上。

Here Strings 还可以用于为接受脚本代码作为输入的命令指定输入,例如awkperl。例如,以下命令使用 Here String 为 awk 命令指定一个脚本:

$ awk '{print $1}' 'BEGIN {FS=":"}
{print $1}'

在这个例子中,awk 命令将读取输入并执行在 Here String 中指定的脚本,该脚本将字段分隔符设置为冒号 (:),然后打印每一行输入的第一个字段。

使用“Here Documents”和“Here Strings”

在使用Bash时,“Here Documents”和“Here Strings”在各种情况下都很有用。一些常见的用例包括:

  • 将长文本块或脚本代码指定为命令的输入。

  • 创建易于阅读和维护的脚本或命令,方法是将其分解成多行。

  • 简化为需要多行输入的命令指定输入的过程。

这是一个使用“Here Document”创建新文件并将一些文本写入其中的脚本示例

#!/bin/bash
# Create a new file called "output.txt"
cat > output.txt <<EOF
This is line 1 of the output.
This is line 2 of the output.
This is line 3 of the output.
EOF

此脚本使用cat 命令和> 运算符将输出重定向到名为"output.txt"的新文件。然后使用 Here Document 指定应写入文件中的文本。执行脚本时,cat 命令将 Here Document 中指定的文本写入"output.txt" 文件。

这是一个使用 Here String 将多行字符串作为参数传递给grep 命令的脚本示例:

#!/bin/bash
# Search for a pattern in a multi-line string
grep 'pattern' 'line 1
line 2
line 3'

在这个例子中,grep 命令在 Here String 中指定的多行字符串中搜索字符串"pattern"。如果找到该字符串,grep 命令将把匹配的行打印到屏幕上。

结论

“Here Documents”和“Here Strings”是Bash 中的有用功能,允许用户为命令指定多行输入。它们可以用来指定长文本块或脚本代码作为输入,或者简化指定需要多行输入的命令的输入过程。通过使用 Here Documents 和 Here Strings,用户可以创建更易于阅读和维护的脚本和命令,并更有效地自动化基于 Unix 系统上的各种任务。

更新于:2023年1月4日

2K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告