【问题标题】:How to access special character like $,# using jq如何使用 jq 访问 $,# 等特殊字符
【发布时间】:2020-03-30 09:44:13
【问题描述】:

我正在尝试处理一些包含特殊字符的字符串,例如 abc123#45ab$123qwe&123

我正在尝试在 shell 中获取它,例如:

在 json 文件中:foo=qwe$123

foo=`cat tmp_json | jq -r  '.keys.foo'`

但它来了:

foo=qwe23

JSON 输入

{
  "metadata": {
    "name": "xyz",
    "version": 7,
    "lastUpdated": 1585551422521
  },
  "keys": {
    "abc": "qwe$123",
    "foo": "qwe$123"
  }
}

【问题讨论】:

  • 在您的问题中包含一个示例 json 文件。
  • Json 文件内容:{"metadata":{"name":"xyz","version":7,"lastUpdated":1585551422521},"keys":{"abc": "qwe $123","foo":"qwe$123"}}
  • 你的问题(并且格式正确),而不是评论。

标签: shell sh jq


【解决方案1】:

当 shell 字符串包含您不想被 shell 专门解释的特殊字符时,您必须使用单引号将它们括起来,例如foo='qwe$123'

使用 bash 4.x,格式为

x=`...` 

对于$#& 等字符不会出现任何问题,但应注意此类分配的首选形式是x=$(...)

但是,由于其他特殊字符,这些形式应谨慎使用。

一般来说,最好使用如下成语:

jq -r .... | while -r read line ; do .... ; done

根据您的要求,您可能还希望考虑 jq 的 @sh 过滤器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2020-03-12
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多