我的问题非常简单。我想在cURL命令中使用环境变量,类似于:
curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"$USERNAME","password":"$PASSWORD"}'
当我运行命令时,$ USERNAME作为" $ USERNAME"传递给命令。字符串不是变量的值。有没有办法摆脱这种情况?
感谢。
答案 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=yyy
和curl
是{"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"'"}'