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

lev*_*ver 6 unix linux shell curl environment-variables

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

curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"$USERNAME","password":"$PASSWORD"}' 
Run Code Online (Sandbox Code Playgroud)

当我运行命令时,$ USERNAME作为"$ USERNAME"字符串传递给命令而不是变量的值.有办法逃避这种情况吗?

谢谢.

gle*_*man 15

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

...  -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}"
Run Code Online (Sandbox Code Playgroud)

  • 立即开始工作。多谢! (2认同)

Sas*_*sky 8

curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"'$USERNAME'","password":"'$PASSWORD'"}'
Run Code Online (Sandbox Code Playgroud)

这里的变量被放置在"'"引号之外,并将由 shell 扩展(就像在 中一样echo $USERNAME)。例如,假设USRNAME=xxx传递PASSWORD=yyy给的 argv[7] 字符串curl{"username":"xxx","password":"yyy"}

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


che*_*ner 6

为了减少引用,请改为从标准输入中读取。

curl -k -X POST -H 'Content-Type: application/json' -d @- <<EOF
{ "username": "$USERNAME", "password": "$PASSWORD"}
EOF
Run Code Online (Sandbox Code Playgroud)

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