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.