Bix*_*Bix 4 bash ubuntu json jq
我看过很多关于此的帖子,但无法弄清楚我到底需要什么。我已经尝试-r过argjson等等。
我需要换行符保留为\n而不是转义为\\n。
我还希望能够使用 ``` 来表示代码块,但它会忽略字符串的该部分。
FALLBACK_MESSAGE="TEST MESSAGE - $HOSTNAME"
MARKDOWN_MESSAGE="TEST MESSAGE - $HOSTNAME \(0x0a) \(\n) Hi <@U12345789>\n```Can we do a\nmultiline code block```"
JSON_STRING=$( jq -nr \
--arg fallbackMessage "$FALLBACK_MESSAGE" \
--arg sectionType "section" \
--arg markdownType "mrkdwn" \
--arg textMessage "$MARKDOWN_MESSAGE" \
'{
text: $fallbackMessage,
blocks: [
{
type: $sectionType,
text: {
type: $markdownType,
text: $textMessage
}
}
]
}')
echo $JSON_STRING
Run Code Online (Sandbox Code Playgroud)
输出:
{ "text": "TEST MESSAGE - devDebug", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "TEST MESSAGE - devDebug \\(0x0a) \\(\\n) Hi <@U12345789>\\n" } } ] }
Run Code Online (Sandbox Code Playgroud)
确保您的 shell 变量包含实际的换行符,而不是\n序列。
如果您希望 bash 将字符串中的转义序列转换为它们引用的字符,printf %b可以用于此目的。
#!/usr/bin/env bash
fallback_message="TEST MESSAGE - $HOSTNAME"
markdown_message="TEST MESSAGE - $HOSTNAME \(0x0a) \(\n) Hi <@U12345789>\n\`\`\`Can we do a\nmultiline code block\`\`\`"
# create markdown_message_unescaped with an unescaped version of markdown_message
printf -v markdown_message_unescaped %b "$markdown_message"
jq -n \
--arg textMessage "$markdown_message_unescaped" \
--arg fallbackMessage "$fallback_message" \
--arg sectionType section --arg markdownType markdown '
{
text: $fallbackMessage,
blocks: [
{
type: $sectionType,
text: {
type: $markdownType,
text: $textMessage
}
}
]
}'
Run Code Online (Sandbox Code Playgroud)
...正确发出输出:
{
"text": "TEST MESSAGE - YOUR_HOSTNAME",
"blocks": [
{
"type": "section",
"text": {
"type": "markdown",
"text": "TEST MESSAGE - YOUR_HOSTNAME (0x0a) (\n)\nHi <@U12345789>\n```\nCan we do a multiline code block\n```"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3532 次 |
| 最近记录: |