我在工作中将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 终端中运行此命令,似乎<< $$$
使控制台等待更多输入。如果是这种情况,我如何向终端指定我已经完成了向它馈送输入?
后来编辑:我发现卷曲参数-d @-
暗示数据将从标准变为红色。
这是一个带有不寻常结束标记的"here-document"。
here-document是一种重定向类型,通常看起来像
utility <<MARKER
document
content
goes here
MARKER
也就是说,它将一个由MARKER
分隔的文档馈送到其标准输入的实用程序。
这就像utility <file
file
包含 here-文档中的行,除了 shell 将对文档文本进行变量扩展和命令替换(这可以通过在开头引用标记作为MARKER
或'MARKER'
来防止(。
此处文档标记可以是任何单词,但$$$
是一个非常不寻常的单词选择。 由于$
在外壳中具有特殊含义,因此在标记中使用$
可能会或可能会使读者感到困惑。
如果您键入
somecommand <<stuff
在命令行管理程序中,命令行管理程序希望您提供 HERE-文档的其余内容,然后将单词单独stuff
在一行上。 这就是您在 here-文档中发出输入结束信号的方式。