【问题标题】:How can I use environment variables in body of a curl PUT request?如何在 curl PUT 请求的正文中使用环境变量?
【发布时间】:2018-02-19 13:45:56
【问题描述】:

我想做一个在正文中使用环境变量的 curl 请求:

curl -XPUT http://${HOST}/create -d'{"user":"${USER}"}'

在这个请求中,${HOST} 被环境变量正确替换,但${USER} 不是。我该如何替换${USER}

【问题讨论】:

  • 如果你想让你的shell扩展$USER,它不能在单引号内。尝试-d'{"user":"'"${USER}"'"}',但如果$USER 来自不受信任的来源(或者可能包含" 等),请务必小心。
  • 谢谢,我正在测试它! -d'{"user":"'${USER}'"}' 也可以吗?我想了解您为什么添加了额外的"
  • 也许 - 我建议始终使用双引号将参数扩展括起来,除非您确实希望在结果上发生分词。即使我完全信任 $USER,使用双引号也有助于表明我的预期。
  • 替代:-d"{\"user\":\"${USER}\"}"
  • 我将不得不阅读这一点,因为我真的不明白你的意思是“除非你肯定希望在结果上发生分词”。也就是说,如果您将第一条评论粘贴到单独的答案中,我可以接受它作为答案,因为它有效!谢谢,不胜感激。

标签: linux curl environment-variables


【解决方案1】:

Shell 参数扩展不会发生在单引号内。您可以关闭单引号并为扩展开始新的双引号:

curl -XPUT http://${HOST}/create -d'{"user":"'"${USER}"'"}'

或者你可以使用双引号来代替:

curl -XPUT http://${HOST}/create -d"{\"user\":\"${USER}\"}"

在这两种情况下,您都需要能够相信 $USER 不包含 " - 您可能需要先对其进行清理:

# This is a Bash extension to POSIX
USER=${USER//\"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 2017-06-20
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多