Как получить доступ к специальному символу, например, $, #, используя jq - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь обработать строку, содержащую специальные символы, такие как abc123#45 или ab$123 или qwe&123.

Я пытаюсь получить ее в оболочке, например:

В 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"
  }
}

1 Ответ

0 голосов
/ 30 марта 2020

Когда строки оболочки содержат специальные символы, которые вы не хотите интерпретировать специально для оболочки, вы должны заключать их в кавычки, например foo='qwe$123'

Используя bash 4.x, Форма

x=`...` 

не представляет проблем с такими символами, как $, # или &, хотя следует отметить, что предпочтительной формой для таких назначений является x=$(...)

Однако эти формы следует использовать только с большой осторожностью из-за других специальных символов.

Как правило, было бы лучше использовать такие выражения, как:

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

В зависимости от в соответствии с вашими требованиями вы также можете рассмотреть фильтр jq @sh.

...