..

Here Document的使用

介绍

Here document 是一种特殊的文件符号、文件面量,基本是用来在命令行里输入多行文本。也很奇怪,不知道为什么,我一直很抵触使用这个东西,至今用不熟练,也不明其意。可能是望而生畏吧,也可能是觉得这种输入多行文本不够稳重。更喜欢用 vim/emacs 来输入多行文本。

但是这个东西,确实有其使用场景。即便不爱用,至少还是要明白其内容。

先给一个简单的示例:

❯ cat <<EOF
∙ a a aaaa
∙ bbbbbb
∙ cc ccc cccEOF
∙ EOF
a a aaaa
bbbbbb
cc ccc cccEOF

拆解一下,上面的例子:

  1. cat 命令不是 here document 的一部分。但是没有这个 cat,here document 就几乎没有用了。here document 生成一个临时的文件符,cat 命令用来把其内容打印出来。一般要结合 pipe 使用
  2. <<EOF 到 EOF 的内容是一个 here document。
    1. <<EOF 是其 开始标志EOF 是可以自定义的结束符号,大家惯用 EOF 作为结束符。这一行还会
    2. 第二行开始到最后单独出现 EOF 行之间的内容,为 document 的 内容。每行开头的点,是 here document 自动加上的,不是内容。
    3. 最后一行的 EOF 是结束位置,不作为内容。

用例

输入多行作为参数,配合 pipe 操作:

❯ cat <<EOF | xargs -n 1 docker manifest inspect 
∙ quay.io/prometheus/node-exporter:v1.8.2
ghcr.io/prometheus-community/windows-exporter:0.27.2
ghcr.io/prometheus-community/windows-exporter:0.27.2
docker.io/library/busybox:1.31.1
quay.io/kiwigrid/k8s-sidecar:1.27.4
quay.io/kiwigrid/k8s-sidecar:1.27.4
docker.io/grafana/grafana:11.2.0
EOF