在Ubuntu 16.04.2 LTS上使用bash v4.3.48(1)和在macOS Sierra 10.12.5上使用bash v3.2.57,我有以下代码可将JSON数据发布到变量中:
#1
JSON_DATA="Test"; \
curl -X POST "https://www.techotaku.com/json.php" \
-H "Content-Type: application/json" \
-d '{"data":"'$JSON_DATA'"}'
Run Code Online (Sandbox Code Playgroud)
返回:
Array
(
[data] => Test
)
Run Code Online (Sandbox Code Playgroud)
但是,如果$ JSON_DATA包含空格...
#2
JSON_DATA="A Test"; \
curl -X POST "https://www.techotaku.com/json.php" \
-H "Content-Type: application/json" \
-d '{"data":"'$JSON_DATA'"}'
Run Code Online (Sandbox Code Playgroud)
...它抛出一个错误:
curl: (3) [globbing] unmatched close brace/bracket in column 6
Run Code Online (Sandbox Code Playgroud)
我以为这可能是因为引号使用不正确,但是如果我回显JSON数据...
echo '{"data":"'$JSON_DATA'"}'
Run Code Online (Sandbox Code Playgroud)
...看起来格式正确:
{"data":"A Test"}
Run Code Online (Sandbox Code Playgroud)
另外,如果我将JSON数据作为字符串而不是变量包括在内,则它可以工作。
#3
curl -X POST "https://www.techotaku.com/json.php" \
-H "Content-Type: application/json" \
-d '{"data":"A Test"}'
Run Code Online (Sandbox Code Playgroud)
如果变量包含空格,则使它起作用的唯一方法是将JSON数据括在双引号中,并在字符串中转义文字双引号:
#4
JSON_DATA="A Test"; \ …Run Code Online (Sandbox Code Playgroud)