卷曲中的变量向字符串添加反斜杠

卷曲中的变量向字符串添加反斜杠

我正在尝试使用基于某些变量的curl 在 Stripe 中创建客户,但是当我将令牌分配给变量时,它在 Stripe 上给我一个错误,说它不存在。但是,如果我直接输入文本,它就会起作用。我如何使用该$TOKEN变量,是否有什么东西改变了我没有意识到的值?

Michael$ curl https://api.stripe.com/v1/customers -u $access_token: -d source=tok_1CjvRiDZ5DqZ0yaUVWXXXXXX
{
  "error": {
    "code": "token_already_used",
    "doc_url": "https://stripe.com/docs/error-codes/token-already-used",
    "message": "You cannot use a Stripe token more than once: tok_1CjvRiDZ5DqZ0yaUVWXXXXXX.",
    "type": "invalid_request_error"
  }
}

Michael$ curl https://api.stripe.com/v1/customers -u $access_token: -d source=$TOKEN
{
  "error": {
    "code": "resource_missing",
    "doc_url": "https://stripe.com/docs/error-codes/resource-missing",
    "message": "No such token: \"tok_1CjvRiDZ5DqZ0yaUVWXXXXXX\"",
    "param": "source",
    "type": "invalid_request_error"
  }
}

$TOKEN像这样分配

OUTPUT="$(curl https://api.stripe.com/v1/tokens -u $access_token: -d customer=$external_customer_id)"
TOKEN="$(echo $OUTPUT | jq .id)"

答案1

jq给出引用的输出,这适用于 JSON。

$ echo '{ "foo": "foobar" }' | jq .foo
"foobar"

引号最终成为 , 内容的一部分TOKEN,并且在变量展开时不会被删除。 (那时他们只是普通角色。)

但是,有一个选项专门用于此目的:

--raw-output/ -r

使用此选项,如果过滤器的结果是字符串,那么它将直接写入标准输出,而不是格式化为带引号的 JSON 字符串。这对于使 jq 过滤器与非基于 JSON 的系统对话非常有用。

所以,改用TOKEN="$(echo "$OUTPUT" | jq -r .id)"吧。

相关内容