0

My script is taking the command line argument and it needs to pass this to curl command in double quotes. This is the simplified version of what I tried so far:

json=$1;
echo $json;

curl -X POST -d '{"asin":\"$json\", "template":"bolt","version":"1d"}' -H "Content-Type: application/json" http://someURL

But its not working. Please help

Wiktor Stribiżew
  • 607,720
  • 39
  • 448
  • 563
user3681970
  • 1,201
  • 4
  • 19
  • 37
  • Possible duplicate of [Using curl POST with variables defined in bash script functions](https://stackoverflow.com/questions/17029902/using-curl-post-with-variables-defined-in-bash-script-functions) – Benjamin W. Aug 18 '17 at 14:28

1 Answers1

2

$-variables in single quoted strings don't get expanded. The -d argument needs be in double quotes, or at least the $json part needs to be:

curl -X POST -d '{"asin":"'"$json"'", "template":"bolt","version":"1d"}' -H "Content-Type: application/json" http://someURL

'-terminates the single-quoted string, then "$json" follows, and then ' starts an adjacent single quoted string.

The "$json" variable shouldn't expand to a string containing unescaped double quotes or the resulting json will be broken.

Petr Skocik
  • 58,047
  • 6
  • 95
  • 142