Bash 中的 Here 文档

Fumbani Banda 2023年1月30日
  1. 什么是 Bash 中的文档
  2. 使用 Here Document 将多行字符串放入 Bash 中的文件
  3. 在 Bash 中使用 Here Document 交互式编写脚本
  4. 使用 Here 文档向 Bash 中的一个函数传递数据
  5. 在 Bash 中关闭 Here Document 中的参数替换
Bash 中的 Here 文档

本教程解释了 here 文档是什么以及它在将多行字符串写入文件、以交互方式编写 Bash 脚本、将其与函数一起使用以及关闭参数替换的用法。

什么是 Bash 中的文档

Heredoc 是这里文档的缩写。Heredoc 使用交互式程序为命令提供输入。heredoc 使用 Here Tag 来指示命令输入的结束。

第一个 Here Tag 定义将指示输入结束的 Here Tag。此处文档使用的符号如下所示。

command <<Here Tag
>command1
>command2
>command3
>Here Tag

第一个 Here Tag 前面是 << 符号。该符号将 here document 的交互式输入引导到 command 作为进一步处理的标准输入。

定义 Here Tag 时,请确保它不应出现在命令列表中以避免混淆。

使用 Here Document 将多行字符串放入 Bash 中的文件

我们使用 here 文档和 cat 命令以交互方式将多行字符串输入到文本文件中。 << 符号后面的 EOF 定义了此处文档的 Here Tag

这意味着我们将在交互式 shell 上输入一个多行字符串,直到 shell 看到 Here TagEOF,在我们的例子中。在这种情况下,输出重定向运算符 > 用于将 cat 命令的标准输出定向到指定文件 output.txt

cat <<EOF > output.txt
> Hello user.
> Welcome to DelftStack.
> Hope you enjoy your stay.
> EOF

使用符号 >>,作为重定向运算符将 cat 命令的输出附加到指定文件,而 > 符号创建一个新文件,如果文件已经存在,它会重新写入内容的文件。

在 Bash 中使用 Here Document 交互式编写脚本

我们使用 here 文档和 cat 命令以交互方式编写 Bash 脚本并将输出重定向到 Bash 脚本。我们在 << 符号之后定义 Here Tag,并用 Here Tag 界定交互式输入的结尾。

下面脚本中的 Here TagEOF。我们使用输出重定向运算符 > 将输出重定向到 Bash 脚本 echo.sh

cat <<EOF > echo.sh
> #!/bin/bash
>
> echo "Hello World!"
> echo "Welcome to DelftStack."
> EOF

使用 cat 命令,我们检查 echo.sh 脚本的内容。

cat echo.sh

我们使用下面输出中的 here 文档成功编写了 Bash 脚本。

#!/bin/bash

echo "Hello World!"
echo "Welcome to DelftStack."

使用 Here 文档向 Bash 中的一个函数传递数据

下面的脚本从这里的文档中读取输入。我们在脚本中定义了一个名为 GetPersonalInfo 的函数。该函数具有读取输入数据的命令。

我们使用 here 文档将输入数据传递给函数,并使用 echo 命令将数据显示到标准输出。函数内部定义的变量可以在函数外部访问,因为 Bash 中的变量默认是全局的,除非 local 关键字已定义它们。

#!/bin/bash
GetPersonalInfo(){
    read fname
    read lname
    read country
}

GetPersonalInfo <<EOF
John
Doe
USA
EOF

echo "Personal Information"
echo
echo "First Name: $fname"
echo "Last name: $lname"
echo "Country of Residence: $country"

执行 Bash 脚本会产生以下输出。

Personal Information

First Name: John
Last name: Doe
Country of Residence: USA

在 Bash 中关闭 Here Document 中的参数替换

我们使用下面脚本中的 here 文档从现有脚本生成一个新脚本。Here TagEOF 已使用单引号引起来,以避免此处文档中的参数替换。

引用第一个 Here Tag 告诉 here 文档在 here 文档中保留特殊字符的字面含义。

#!/bin/bash
echo "This script generates another script."

cat <<'EOF' > add.sh
#!/bin/bash

x=10
y=11

let "sum = $x + $y"
echo "Total of $x and $y is $sum"
EOF

我们使用 cat 命令检查新生成的脚本 add.sh 的内容。

#!/bin/bash
x=10
y=11

let "sum = $x + $y"
echo "Total of $x and $y is $sum"

执行新生成的脚本会在终端产生以下输出。

Total of 10 and 11 is 21
作者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub