<<$$$ 在 Unix shell 中是什么意思?

What does <<$$$ mean in a Unix shell?

我在工作中使用 google-http-client 进行项目,当我执行一些请求时,我的控制台上打印了以下内容。

curl -v --compressed -X POST -H 'Accept-Encoding: gzip' -H 'User-Agent: Google-HTTP-Java-Client/1.23.0 (gzip)' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -d '@-' -- 'http://example.com' << $$$

我想知道 << $$$ 是什么意思。

如果我尝试 运行 此命令进入 linux 终端似乎 << $$$ 使控制台等待更多输入。如果是这种情况,我如何向终端指定我已完成向它提供输入?

稍后编辑:我发现 curl 参数 -d @- 意味着来自标准输入的数据将为红色。

这是一个带有不寻常结束标记的"here-document"。

here-document 是一种重定向,通常看起来像

utility <<MARKER
document
content
goes here
MARKER

也就是说,它将 MARKER 分隔的文档提供给实用程序的标准输入。

This is like utility <file where file contains the lines in the here-document, except that shell will do variable expansion和文档文本上的命令替换(这可以通过在开始时将标记引用为 \MARKER'MARKER' 来防止)。

here-document 标记可以是任何单词,但 $$$ 是一个非常不寻常的单词选择。由于 $ 在 shell 中具有特殊含义,因此在标记中使用 $ 可能会混淆 reader.

如果你输入

somecommand <<stuff

在 shell 中,shell 希望您提供此处文档的其余内容,然后单独占一行的单词 stuff。这就是您在 here-document 中表示输入结束的方式。