我正在使用 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
分隔的文档到实用程序的标准输入。
这像 utility <file
其中 file
包含 here-document 中的行,除了 shell 将对文档的文本进行变量扩展和命令替换(这可以通过在开始时将标记引用为 \MARKER
或 'MARKER'
来防止)。
here-document 标记可以是任何单词,但是 $$$
是一个非常不寻常的词选择。作为$
在 shell 中有特殊含义,使用 $
标记中的内容会让或可能会让读者感到困惑。
如果你输入
somecommand <<stuff
在 shell 中,shell 希望您提供 here-document 的其余内容,然后是单词 stuff
自己在一条线上。这就是您在 here-document 中表示输入结束的方式。
关于linux - <<$$$ 在 Unix shell 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50335436/