5

Linux bash Heredoc 教程

 1 year ago
source link: https://www.myfreax.com/bash-heredoc/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Linux bash Heredoc 教程

here文档,又称作heredoc、hereis、here-字串或here-脚本,是一种在命令行shell和程式语言里定义一个字串的方法

Updated At 15 Apr 2023 3 min read
By myfreax
Linux bash Heredoc 教程

Linux bash Heredoc 教程

here 文档,又称作 heredoc、hereis、here-字串或 here-脚本,是一种在命令行 Shell 和程式语言里定义一个字串的方法。

它可以保存文字里面的换行或者是缩进等空白字符。一些语言允许在字串里执行变量替换和命令替换。

当编写 Shell 脚本时,你可能在某些情况下,你需要将文本或代码的传递给交互式命令,如 teecatsftp

在 Bash 和 Zsh 等其他 Shell 中,Heredoc 是一种重定向类型,它允许您将多行输入传递给命令。

[COMMAND] <<[-] 'DELIMITER'
  HERE-DOCUMENT
DELIMITER

这是 HereDoc 的采用的语法形式。第一行开头的命令 COMMAND 是可选的,后跟标准输入重定向操作符 << 和定界符 DELIMITER

您可以使用任何字符串作为定界符 DELIMITER,最常用的是 EOF 或 END。

在出入重定向符号 << 后面加上减号 - 将使所有前导制表符被忽略。这使您可以在Shell 程序脚本编写内容时使用缩进。不允许使用前导空格字符,只能使用制表符。

HERE-DOCUMENT 可以包含字符串,变量,命令和任何其他类型的输入。最后一行以定界标识符结尾。分隔符前面不允许有空格。

Heredoc 示例

在本节中,我们将介绍一些如何使用 Heredoc 的基本示例。Heredo c最常与 cat 命令组合使用。

在下面的示例中,我们传递了两行文本,其中包含一个环境变量whoami 命令来使用 Heredoc。

cat << EOF
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF
The current working directory is: /home/myfreax
You are logged in as: myfreax

从输出中可以看到,变量和命令输出都被替换。让我们看看如果将定界符括在单引号或双引号中会发生什么。

您可能会注意到,当使用引号引起来时,Shell 不会进行任何参数展开和命令替换。

cat <<- "EOF"
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

如果在语句或循环中使用 Heredoc,请使用 <<- 允许您缩进代码。

if true; then
    cat <<- EOF
    Line with a leading tab.
    EOF
fi

您也可以使用 >>> 标准输出重定向符号重定向到文件,而不是在屏幕上显示输出。

cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

如果 file.txt 不存在,它将会创建。使用时 >,文件将被覆盖,而 >> 会将输出追加到文件中。

Heredoc 输入也可以通过管道传递。在以下示例中,sed 命令l 字符替换所有字符 e

cat <<'EOF' |  sed 's/l/e/g'
Hello
World
EOF

SSH 使用 heredoc

使用 Heredoc 是通过 SSH 在远程系统执行多个命令的最便捷的方法。您可能还需要设置基于 SSH 密钥无密码登录并连接到Linux服务器。

使用不带引号的定界符时,请确保转义所有变量,命令和特殊字符,否则它们将在本地被解释,进行命令,变量的替换操作。

ssh -T [email protected] << EOF
echo "The current local working directory is: $PWD"
echo "The current remote working directory is: \$PWD"
EOF

结论

在本教程中,您了解了什么是 heredoc。以及如何在 Shell 程序脚本中使用它。如果您有任何问题或反馈,请随时发表评论。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK