在 cURL 命令中使用环境变量 - Unix
Using Environment Variables in cURL Command - Unix
我的问题很简单。我想在类似于此的 cURL 命令中使用环境变量:
curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"$USERNAME","password":"$PASSWORD"}'
当我 运行 命令 $USERNAME 作为“$USERNAME”字符串而不是变量的值传递给命令时。有没有办法摆脱这种情况?
谢谢。
单引号禁止变量替换,所以使用双引号。然后必须转义内部双引号。
... -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}"
为了减少引用,改为从标准输入读取。
curl -k -X POST -H 'Content-Type: application/json' -d @- <<EOF
{ "username": "$USERNAME", "password": "$PASSWORD"}
EOF
-d @foo
从名为 foo
的文件中读取。如果您使用 -
作为文件名,它将从标准输入读取。在这里,标准输入是从 here 文档提供的,它被视为双引号字符串,实际上没有用双引号括起来。
我们的:curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"'"$USERNAME"'","password":"'"$PASSWORD"'"}'
curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"'$USERNAME'","password":"'$PASSWORD'"}'
此处变量位于 "'"
引号之外,并将扩展 shell(就像在 echo $USERNAME
中一样)。例如假设 USRNAME=xxx
和 PASSWORD=yyy
传递给 curl
的 argv[7] 字符串是 {"username":"xxx","password":"yyy"}
是的,当 $USERNAME 或 $PASSWORD 包含 space 个字符时,这将不起作用。
您可以用 "'"
包装环境变量,并且您应该为外部 json 对象保留单引号。
例如
-d '{"username":"'"$USERNAME"'","password":"'"$PASSWORD"'"}'
我的问题很简单。我想在类似于此的 cURL 命令中使用环境变量:
curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"$USERNAME","password":"$PASSWORD"}'
当我 运行 命令 $USERNAME 作为“$USERNAME”字符串而不是变量的值传递给命令时。有没有办法摆脱这种情况?
谢谢。
单引号禁止变量替换,所以使用双引号。然后必须转义内部双引号。
... -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}"
为了减少引用,改为从标准输入读取。
curl -k -X POST -H 'Content-Type: application/json' -d @- <<EOF
{ "username": "$USERNAME", "password": "$PASSWORD"}
EOF
-d @foo
从名为 foo
的文件中读取。如果您使用 -
作为文件名,它将从标准输入读取。在这里,标准输入是从 here 文档提供的,它被视为双引号字符串,实际上没有用双引号括起来。
我们的:curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"'"$USERNAME"'","password":"'"$PASSWORD"'"}'
curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"'$USERNAME'","password":"'$PASSWORD'"}'
此处变量位于 "'"
引号之外,并将扩展 shell(就像在 echo $USERNAME
中一样)。例如假设 USRNAME=xxx
和 PASSWORD=yyy
传递给 curl
的 argv[7] 字符串是 {"username":"xxx","password":"yyy"}
是的,当 $USERNAME 或 $PASSWORD 包含 space 个字符时,这将不起作用。
您可以用 "'"
包装环境变量,并且您应该为外部 json 对象保留单引号。
例如
-d '{"username":"'"$USERNAME"'","password":"'"$PASSWORD"'"}'