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

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

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

$ 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?

решение1

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

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

решение2

В частном случае 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

решение3

Есть более простой и эффективный способ — использовать встроенную функцию удаления префикса/суффикса оболочки:

my_json=$(cat ~/Downloads/json.txt | jq '.name')
    temp="${my_json%\"}"
    temp="${temp#\"}"
    echo "$temp"

Источникhttps://stackoverflow.com/questions/9733338/shell-script-remove-first-and-last-quote-from-a-variable

решение4

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

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

но это не идеально — может легко привести к ошибкам и/или уязвимостям безопасности.

Связанный контент