Using Environment Variables in cURL Command - Unix

后端 未结 4 1255
面向向阳花
面向向阳花 2021-02-20 10:59

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 \         


        
相关标签:
4条回答
  • 2021-02-20 11:48

    Single quotes inhibit variable substitution, so use double quotes. The inner double quotes must then be escaped.

    ...  -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}"
    
    0 讨论(0)
  • 2021-02-20 11:49

    For less quoting, read from standard input instead.

    curl -k -X POST -H 'Content-Type: application/json' -d @- <<EOF
    { "username": "$USERNAME", "password": "$PASSWORD"}
    EOF
    

    -d @foo reads from a file named foo. 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.

    0 讨论(0)
  • 2021-02-20 11:57
    curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"'$USERNAME'","password":"'$PASSWORD'"}'
    

    Here the variable are placed outside of "'" quotes and will be expanded by shell (just like in echo $USERNAME). For example assuming that USRNAME=xxx and PASSWORD=yyy the argv[7] string passed to curl is {"username":"xxx","password":"yyy"}

    And yes, this will not work when $USERNAME or $PASSWORD contain space characters.

    0 讨论(0)
  • 2021-02-20 12:04

    Our: curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"'"$USERNAME"'","password":"'"$PASSWORD"'"}'

    0 讨论(0)
提交回复
热议问题