Bash CLI удаляет кавычки из вывода команды


12

Я пытаюсь загрузить файл в формате JSON , используя jqна здесь . Это довольно просто, и это работает:

$ cat ~/Downloads/json.txt | jq '.name'
"web"

Однако мне нужно назначить вывод этой переменной команде. Я пытался сделать это, и это работает:

$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt

Но я хочу /home/qut/Downloads/web.txt.

Как мне удалить цитаты, то есть изменить "web"на web?

Ответы:


27

Вы можете использовать команду tr для удаления кавычек:

my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")

2
Спасибо за trкоманду ... Я просмотрел 4 разных поста с сотнями голосов с людьми, написавшими 40+ символов мега-однострочников, чтобы выполнить свою работу. У вас есть правильное (и, вероятно, современное) решение.
Шадониня,

15

В частном случае jqвы можете указать, что вывод должен быть в необработанном формате:

   --raw-output / -r:

   With this option, if the filter´s result is a string then  it  will
   be  written directly to standard output rather than being formatted
   as a JSON string with quotes. This can be useful for making jq fil‐
   ters talk to non-JSON-based systems.

Чтобы проиллюстрировать, используя образец json.txtфайла по вашей ссылке :

$ jq '.name' json.txt
"Google"

в то время как

$ jq -r '.name' json.txt
Google

1

Вы можете использовать eval echoкак это:

my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name'))

но это не идеально - может легко вызвать ошибки и / или недостатки безопасности.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.