【问题标题】:Pass html message as parameter in shell script将html消息作为shell脚本中的参数传递
【发布时间】:2020-07-06 14:57:00
【问题描述】:

我正在尝试通过

jq '.text.message="<p style=text-align: left; font-size: 14px><font color=\"#1a1a1a\"><b>Test</b></font> </p>"'

但它不接受 HTML。 如何使用 jq 将 HTML 作为消息传递

【问题讨论】:

  • 你真正想做什么?提取一些 HTML 部分? jq 不是用于 HTML,而是用于 JSON

标签: bash shell jq


【解决方案1】:

(不是答案,而是格式化的评论)

你遇到了什么问题?这工作正常:

echo '{"text": {"message": "some message here"}}' |
  jq '.text.message="<p style=text-align: left; font-size: 14px><font color=\"#1a1a1a\"><b>Test</b></font> </p>"'

输出

{
  "text": {
    "message": "<p style=text-align: left; font-size: 14px><font color=\"#1a1a1a\"><b>Test</b></font> </p>"
  }
}

这是一种避免任何需要转义“内部”双引号的方法:

html='<![CDATA[ <p style="text-align: left; font-size: 14px; color: #4d4d4d; line-height: 18px;"><font color="#1a1a1a"><b>test</b></font> - <font color="#4d4d4d">Hello </font></p> <p style="text-align: left; font-size: 14px; color: #4d4d4d; line-height: 18px;"><font color="#1a1a1a"><b>test</b></font> - <font color="#4d4d4d">Hi </font></p> ]]>'

# pass the shell variable into jq with the --arg option:
echo '{"text": {"message": "some message here"}}' | jq --arg msg "$html" '.text.message = $msg'
{
  "text": {
    "message": "<![CDATA[ <p style=\"text-align: left; font-size: 14px; color: #4d4d4d; line-height: 18px;\"><font color=\"#1a1a1a\"><b>test</b></font> - <font color=\"#4d4d4d\">Hello </font></p> <p style=\"text-align: left; font-size: 14px; color: #4d4d4d; line-height: 18px;\"><font color=\"#1a1a1a\"><b>test</b></font> - <font color=\"#4d4d4d\">Hi </font></p> ]]>"
  }
}

【讨论】:

  • 我想查看消息 = 测试 - 你好

    测试 -

    ]]>
  • jq: 错误:语法错误,意外 IDENT,在 第 2 行需要 $end(Unix shell 引用问题?):
【解决方案2】:

不清楚您的输入是什么,或者您的预期输出是什么,但问题的一种解读是没有输入。 在这种情况下,答案是:使用 -n 命令行选项:

$ jq -n '.text.message="<p style=text-align: left; font-size: 14px><font color=\"#1a1a1a\"><b>Test</b></font> </p>"'

输出

{
  "text": {
    "message": "<p style=text-align: left; font-size: 14px><font color=\"#1a1a1a\"><b>Test</b></font> </p>"
  }
}

“我们可以传递复杂的 HTML 吗?”

以下是三种方法的图示:

jq -R '. as $in | ({} | .text.message=$in)' <<< "$data"
jq -R '{text: {message: .}}'  <<< "$data"

jq -n --arg data "$data" '.text.message=.'

对于测试,您可以使用您的示例:

data='<![CDATA[ <p style="text-align: left; font-size: 14px; color: #4d4d4d; line-height: 18px;"><font color="#1a1a1a"><b>test</b></font> - <font color="#4d4d4d">Hello </font></p> <p style="text-align: left; font-size: 14px; color: #4d4d4d; line-height: 18px;"><font color="#1a1a1a"><b>test</b></font> - <font color="#4d4d4d">Hi </font></p> ]]>'

【讨论】:

  • 我们可以传递复杂的html吗?
  • 测试 - 你好

    测试 - ]]>

猜你喜欢
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
相关资源
最近更新 更多