I tried to execute a CURL statement as follows, for which I am getting required response:
curl -s -POST --header \'Content-Type: application/json\' \'http://
Single quotes '
(you're using in -d
argument) preserve the literal value of each character, including the $
(see this SO answer), and that's why your variable query_string
is not being expanded.
Try this:
~$ query_string="my query"
~$ echo '$query_string'
$query_string
~$ echo "$query_string"
my query
So, you need to use double quotes "
if you wish your variables to expand to its values.
However, in order to nest double quotes (inside other double quotes), as in you JSON data, you must either:
escape the inner quotes, like this:
~$ echo "{\"query\": \"$query_string\"}"
{"query": "my query"}
but that gets very ugly, very soon; or
concatenate strings under alternating single and double quotes, like this:
~$ echo '{"query": "'"$query_string"'"}"'
{"query": "my query"}"
which may be more readable for shorter strings; or
use a here-document:
~$ read query <<-END
{"query": "$query_string"}
END
~$ echo "$query"
{"query": "my query"}
Here-documents are particularly convenient for longer documents in which you wish for parameter/variable expansion, command substitution, arithmetic expansion, etc.
In summary, after defining your JSON query with one of the above ways (perhaps via a here-document), you can write your curl
command like this:
curl -s -X POST -H 'Content-Type: application/json' 'http://www.dummy.com/projectname/page_relevance' -d "$query"