Verwenden von Bash v4.3.48 (1) auf Ubuntu 16.04.2 LTS und Bash v3.2.57 auf MacOS Sierra 10.12.5 Ich habe diesen Code, in dem JSON-Daten POST gespeichert eine Variable:cURL wirft Globbing-Fehler, wenn JSON-Daten in Variable ein Leerzeichen enthält
#1
JSON_DATA="Test"; \
curl -X POST "https://www.techotaku.com/json.php" \
-H "Content-Type: application/json" \
-d '{"data":"'$JSON_DATA'"}'
Das gibt:
Array
(
[data] => Test
)
wenn jedoch $ JSON_DATA ein Leerzeichen enthält ...
#2
JSON_DATA="A Test"; \
curl -X POST "https://www.techotaku.com/json.php" \
-H "Content-Type: application/json" \
-d '{"data":"'$JSON_DATA'"}'
... es wirft einen Fehler:
curl: (3) [globbing] unmatched close brace/bracket in column 6
Ich dachte, das durch falsche Verwendung von Zitaten sein könnte, aber wenn ich die JSON-Daten echo ...
echo '{"data":"'$JSON_DATA'"}'
... es scheint gut gebildet:
{"data":"A Test"}
auch wenn ich die JSON-Daten als String und keine Variable enthalten, es funktioniert.
#3
curl -X POST "https://www.techotaku.com/json.php" \
-H "Content-Type: application/json" \
-d '{"data":"A Test"}'
Die einzige Art, wie ich es bekommen kann zu arbeiten, wenn die Variable einen Raum enthält, ist die JSON-Daten in doppelten Anführungszeichen und entfliehen Sie dem wörtlichen doppelten Anführungszeichen in der Zeichenfolge einzuschließen:
#4
JSON_DATA="A Test"; \
curl -X POST "https://www.techotaku.com/json.php" \
-H "Content-Type: application/json" \
-d "{\"data\":\"$JSON_DATA\"}"
Ich hätte gedacht, dass alle 4 Beispiele funktioniert hätten. Kann also irgendwer darauf eingehen, warum nur die Beispiele 1,3 und 4 funktionieren und Beispiel 2 nicht?
Vielen Dank, Steve.
Vielen Dank @randomir. Diese Zitate haben mir den Kopf verdreht, aber jetzt haben Sie es einfach erklärt. –
Sie sind herzlich willkommen! – randomir