My question is very simple. I want to use environment variables in a cURL command sth similar to this:
curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"$USERNAME","password":"$PASSWORD"}'
When I run the command $USERNAME is passed to the command as a "$USERNAME" string not the value of the variable. Is there a way to escape this situation?
Thanks.
Here the variable are placed outside of
"'"
quotes and will be expanded by shell (just like inecho $USERNAME
). For example assuming thatUSRNAME=xxx
andPASSWORD=yyy
the argv[7] string passed tocurl
is{"username":"xxx","password":"yyy"}
And yes, this will not work when $USERNAME or $PASSWORD contain space characters.
Our:
curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"'"$USERNAME"'","password":"'"$PASSWORD"'"}'
Single quotes inhibit variable substitution, so use double quotes. The inner double quotes must then be escaped.
For less quoting, read from standard input instead.
-d @foo
reads from a file namedfoo
. If you use-
as the file name, it reads from standard input. Here, standard input is supplied from a here document, which is treated as a double-quoted string without actually enclosing it in double quotes.