Я пытаюсь загрузить файл JSON с помощью jq
perздесь. Это довольно просто и работает:
$ 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'))
но это не идеально — может легко привести к ошибкам и/или уязвимостям безопасности.