I am trying to load a JSON file using jq per here. It is quite straightforward and this works:

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

However, I need to assign the output of this variable to a command. I tried to do this and this works:

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

But I want /home/qut/Downloads/web.txt.

How do I remove the quotes, i.e. change "web" to web?


You can use the tr command to remove the quotes:

my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
  • 2
    Thank you for the tr command... I looked through 4 different posts with hundreds of upvotes with people writing 40+ character mega-one-liners to get the job done. You have the correct (and probably modern) solution. – Shadoninja Jun 11 '18 at 15:04

In the particular case of jq, you can specify that the output should be in raw format:

   --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.

To illustrate using the sample json.txt file from your link:

$ jq '.name' json.txt


$ jq -r '.name' json.txt

You could use eval echo like this:

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

but this is not ideal - could easily cause bugs and/or security flaws.


There's more simple and efficient, using the native shell prefix/suffix removal feature:

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

Source https://stackoverflow.com/questions/9733338/shell-script-remove-first-and-last-quote-from-a-variable

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.