【问题标题】:What does <<$$$ mean in a Unix shell?<<$$$ 在 Unix shell 中是什么意思?
【发布时间】:2018-10-24 09:58:51
【问题描述】:

我在工作项目中使用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' << $$$

我想知道&lt;&lt; $$$ 是什么意思。

如果我尝试在 linux 终端中运行此命令,&lt;&lt; $$$ 似乎会使控制台等待更多输入。如果是这种情况,我如何向终端指定我已完成向其提供输入?

稍后编辑:我发现 curl 参数 -d @- 暗示数据将从标准输入变为红色。

【问题讨论】:

标签: linux shell curl google-http-client


【解决方案1】:

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

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

utility <<MARKER
document
content
goes here
MARKER

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

类似 utility &lt;file 其中file 包含here-document 中的行,除了shell 将对文档的文本进行变量扩展和命令替换(这可能是通过在开头将标记引用为\MARKER'MARKER' 来防止)。

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

如果你输入

somecommand <<stuff

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

【讨论】:

  • $$$ 不是“坏”的heredoc 标记,因为shell 不会扩展它。这绝对不是一个理想的选择,因为它会使读者感到困惑。在这里很好地解释了:How does “cat << EOF” work in bash?.
  • @codeforester 这就是我的意思。由于$ 在shell 中具有特殊含义,因此将$$$ 视为不带引号的字符串是非常不寻常的。我会改写的。
猜你喜欢
  • 2020-07-06
  • 1970-01-01
  • 2010-09-09
  • 2012-10-14
  • 2011-11-14
  • 2010-10-23
  • 2012-04-17
相关资源
最近更新 更多