在cURL命令中使用环境变量 - Unix

时间:2015-08-12 11:34:08

标签: linux shell unix curl environment-variables

我的问题非常简单。我想在cURL命令中使用环境变量,类似于:

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

当我运行命令时,$ USERNAME作为" $ USERNAME"传递给命令。字符串不是变量的值。有没有办法摆脱这种情况?

感谢。

5 个答案:

答案 0 :(得分:12)

单引号禁止变量替换,因此请使用双引号。然后必须转义内部双引号。

...  -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}"

答案 1 :(得分:5)

对于较少的引用,请改为从标准输入读取。

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

-d @foo从名为foo的文件中读取。如果使用-作为文件名,则从标准输入读取。这里,标准输入是从here文档提供的,该文档被视为双引号字符串,而不是用双引号将其实际括起来。

答案 2 :(得分:2)

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

此处,变量位于"'"引号之外,并会被shell扩展(就像echo $USERNAME中一样)。例如,假设传递给USRNAME=xxx的argv [7]字符串为PASSWORD=yyycurl{"username":"xxx","password":"yyy"}

是的,当$ USERNAME或$ PASSWORD包含空格字符时,这将不起作用。

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

您可以使用 "'" 包装环境变量,并且您应该保留外部 json 对象的单引号。

例如

 -d '{"username":"'"$USERNAME"'","password":"'"$PASSWORD"'"}'