#shell #jq #double-quotes
#оболочка #jq #двойные кавычки
Вопрос:
Я пытался jq --argjson value '{"foo": "bar", "bar": "foo"}' ".x = $value" <<< "$json"
Значение $ json
{
"x":{
"foo": "hello"
},
"y":{
"foo": "world"
}
}
Все, что я получаю, это jq: 1 compile error
Я ожидаю:
{
"x":{
"foo": "bar",
"bar": "foo"
},
"y":{
"foo": "world"
}
}
Я попытался добавить кавычки вокруг $value, но он жалуется на проблемы с цитированием bash, и я полагаю, что он пытается сохранить весь объект json в виде строки
Комментарии:
1. проверьте свои кавычки
2. @hek2mgl Извиняюсь, кавычки указаны правильно в моем терминале, но я неправильно ввел их в поле stackoverflow
3. Если значение действительно жестко запрограммировано, как показано, это было бы проще без использования
--argjson
:jq '.x = { foo: "bar", bar: "foo"}}' <<< "$json"
.4. @chepner Не жестко запрограммирован, я фактически извлекаю объект json из файла json, манипулирую им, а затем копирую его во второй файл json. Здесь это жестко запрограммировано, потому что я знаю, что копия из части работает (проверял ее с помощью echos и прочего). Это средний этап обработки
Ответ №1:
Доллар должен быть экранирован при использовании внутри строки в двойных кавычках в оболочке. В противном случае оболочка интерпретировала бы это и расширила оператор до:
jq --argjson value '{"foo": "bar", "bar": "foo"}' ".x = " <<< "$json"
empty since not set in the shell ^^^
Я предлагаю заключить команду jq в одинарные кавычки:
jq --argjson value '{"foo": "bar", "bar": "foo"}' '.x = $value' <<< "$json"
Комментарии:
1. похоже, ваша переменная $ json искажена
2. Вы правы (как в искаженных, так и в кавычках). Я только что дважды проверил это. Спасибо. Я приму этот ответ, как только stackoverflow позволит мне
3. Рад, что это помогло!