2

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 @-意味着数据将从标准输入变为红色。

4

1 回答 1

1

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

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

utility <<MARKER
document
content
goes here
MARKER

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

就像 utility <filewherefile包含 here-document 中的行,除了 shell 将对文档的文本进行变量扩展和命令替换(这可以通过在开头\MARKER'MARKER'开头引用标记来防止)。

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

如果你输入

somecommand <<stuff

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

于 2018-05-14T17:10:33.483 回答