gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:03:04 45 4
gpt4 key购买 nike

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

curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"$USERNAME","password":"$PASSWORD"}' 

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

谢谢。

最佳答案

单引号禁止变量替换,所以使用双引号。然后必须转义内部双引号。

...  -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}"

自从这个答案写于 2015 年以来,很明显这种技术不足以正确创建 JSON:

$ USERNAME=person1
$ PASSWORD="some \"gnarly 'password"
$ echo "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}"
{"username":"person1","password":"some "gnarly 'password"}
$ echo "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}" | jq .
parse error: Invalid numeric literal at line 1, column 47

引用问题很清楚。 ( shell )解决方案不是

当前的最佳实践:使用特定于 JSON 的工具来创建 JSON:

  • $ jq -n -c --arg username "$USERNAME" --arg password "$PASSWORD" '$ARGS.named'
    {"username":"person1","password":"some \"gnarly 'password"}
  • $ jo "username=$USERNAME" "password=$PASSWORD"
    {"username":"person1","password":"some \"gnarly 'password"}

curl :

json=$( jq -n -c --arg username "$USERNAME" --arg password "$PASSWORD" '$ARGS.named' )
# or
json=$( jo "username=$USERNAME" "password=$PASSWORD" )

# then
curl ... -d "$json"

关于linux - 在 cURL 命令中使用环境变量 - Unix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31964031/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com