컬의 변수는 문자열에 백슬래시를 추가합니다.

컬의 변수는 문자열에 백슬래시를 추가합니다.

일부 변수를 기반으로 컬을 사용하여 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)"대신에 그것을 사용하세요.

관련 정보