Bash CLI remove quotes from output of a command
Solution 1
You can use the tr command to remove the quotes:
my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
Solution 2
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
"Google"
whereas
$ jq -r '.name' json.txt
Google
Solution 3
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.
Solution 4
There's more simple and efficient, using the native shell prefix/suffix removal feature:
my_json=$(cat ~/Downloads/json.txt | jq '.name')
temp="${my_json%\"}"
temp="${temp#\"}"
echo "$temp"
Source https://stackoverflow.com/questions/9733338/shell-script-remove-first-and-last-quote-from-a-variable
Related videos on Youtube

edesz
Updated on September 18, 2022Comments
-
edesz 3 months
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' "web"
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 /home/qut/Downloads/"web".txt
But I want
/home/qut/Downloads/web.txt
.How do I remove the quotes, i.e. change
"web"
toweb
? -
Shadoninja over 4 yearsThank 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.