我在工作中使用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中变为红色。
答案 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中发出输入结束信号的方式。