cURL POST bash 스크립트는 공백이 있는 변수에 작은따옴표를 추가합니다.

cURL POST bash 스크립트는 공백이 있는 변수에 작은따옴표를 추가합니다.

처음 3개 변수에는 항상 공백이 없습니다. 네 번째 " slacksitename"에는 공백이 있습니다.

ip=“x.x.x.x"
record_name=“demo.xyz"
slackuri:”WEBHOOK"
slacksitename:”123 Main St"

cURL로 호출하는 경우

curl -X POST -H 'Content-type: application/json' --data '{"text":"’$slacksitename': '$ip' '$record_name' DDNS updated.”}’ $slackuri

출력은 다음과 같습니다.

curl -X POST -H 'Content-type: application/json' --data '{"text":"123' Main 'St: x.x.x.x demo.xyz DDNS updated."}' https://hooks.slack.com/services/……..
curl: (6) Could not resolve host: Main
curl: (3) unmatched close brace/bracket in URL position 59:
St: x.x.x.x demo.xyz DDNS updated."

왜 작은 따옴표를 추가하는지 아는 사람이 있습니까 123' Main 'St? 그리고 전체 변수를 분할하는 대신 하나의 문자열로 처리하려면 어떻게 해야 할까요?

감사해요

업데이트: 해결되었습니다^^

후속 조치:

이것은 아마도 원래 질문과 같은 내용일 것입니다.

cURL을 통해 보내려는 JSON 출력 변수가 있습니다. 문제가 다시 인용문이라고 가정하고 있지만 JSON 출력이 변경될 수 있습니다(인용문 수). 새 줄을 사용하여 메시지에 cURL을 사용하여 이 원시 데이터를 보낼 수 있는 방법이 있습니까? 감사해요

DUMPING RESULTS:\n{"result":{"id":"ppbkbz2ezmxen11vvpi65chsro1vki5y","zone_id":"unuM0sR1gSrQ37r9fGC1sYKFZOP0DzJM","zone_name":"demo.xyz","name":"1.demo.xyz","type":"A","content":"x.x.x.x","proxiable":true,"proxied":false,"ttl":1,"locked":false,"meta":{"auto_added":false,"managed_by_apps":false,"managed_by_argo_tunnel":false,"source":"primary"},"created_on":"2020-06-14T19:13:57.096688Z","modified_on":"2021-10-16T16:57:49.269274Z"},"success":true,"errors":[],"messages":[]}."

답변1

Bash에서 인용되지 않은 변수를 사용하고 있는데 단어 분할이 발생하는 것에 놀란 것처럼 보입니다. 이것이 일어나기로 되어 있는 일입니다.

또한 귀하의 질문에는 자동 서식 때문에 발생했다고 가정할 비표준 인용문이 있습니다. 그러나 는 "와 동일하지 않고 '동일하지 않습니다 ʼ.

curl -X POST -H 'Content-type: application/json' --data '{"text":"’$slacksitename': '$ip' '$record_name' DDNS updated.”}’ $slackuri

명령줄에서 {"text":"따옴표가 없는 내용을 인용하고 추가합니다 $slacksitename. 이는 단어 분할이 발생함을 의미합니다. 최종 결과는 , {"text":"123, Main3 개의 별도 인수가 됩니다 St. 세 번째 인수는 :따옴표가 없는 내용과 연결되므로 $ip해당 변수에 공백이 있으면 동일한 일이 발생합니다.

이것은 본질적으로 bash 101입니다. 수행 중인 작업을 모르는 경우 변수를 인용하십시오.

답변2

내가 찾을 수 있는 이 문제를 해결할 수 있는 유일한 방법은 json을 파일에 저장한 다음 컬 호출 -d "@"에서 참조하는 것입니다.

답변3

그냥 큰따옴표를 사용하세요.

curl -X POST -H 'Content-type: application/json' -d "$json"

관련 정보