背景
curlコマンドでJSONを送りたいが、JSONの中に変数を書きたい。
$ curl -Ssi "http://nantara-kantara" -H "Content-Type:application/json" -X POST -d '{"user_name":"$VAR"}'
「$VAR」という文字列が送られてしまう…。
ポイント
ポイントはここにあった。
→'{"user_name":"$VAR"}'←
ShellScriptのダブルクォートとシングルクォートの違い
ダブルクォートの中の変数や式は展開されるのに対して、シングルクォートは展開されません。
解決
つまり、こう書かなければならない。
$ curl -Ssi "http://nantara-kantara" -H "Content-Type:application/json" -X POST -d "{\"user_name\":\"$VAR\"}"
全体をダブルクオートで囲んだことにより、JSON内部のダブルクオートはエスケープしなければならなくなった。