什么<< $$$在Unix shell中意味着什么?

时间:2018-05-14 16:57:04

标签: linux shell curl google-http-client

我在工作中使用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 @-暗示数据将从stdin中变为红色。

1 个答案:

答案 0 :(得分:1)

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

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

utility <<MARKER
document
content
goes here
MARKER

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

这是 like utility <file其中file包含here-document中的行,除了shell将对文档的文本执行变量扩展和命令替换(这可以通过在开始时将标记引用为\MARKER'MARKER'来防止。

here-document标记可以是任何单词,但$$$是一个非常不寻常的单词选择。由于$在shell中具有特殊含义,因此在标记中使用$会使读者感到困惑,或者可能会让读者感到困惑。

如果您输入

somecommand <<stuff
在shell中,shell希望你提供here-document的其余内容,然后单独在一行上提供单词stuff。这就是你在here-document中发出输入结束信号的方式。