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”还可以用于为接受脚本代码作为输入的命令指定输入,例如awk 或perl。例如,以下命令使用 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 还可以用于为接受脚本代码作为输入的命令指定输入,例如awk 或perl。例如,以下命令使用 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 系统上的各种任务。