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)
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 包含空格字符时,这将不起作用。
为了减少引用,请改为从标准输入中读取。
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文档提供的,该文档被视为双引号字符串,而实际上并未将其用双引号引起来。