0

我不明白为什么在 Zsh 中使用 HTTPie 发送嵌套 JSON 不能按预期工作。看起来 Zsh 默认尝试匹配括号内容,但关闭匹配(通过 noglob、nomatch 等选项)似乎不起作用,并且 Httpie 形成文字 foo[bar] 而不是嵌套对象:

> http --offline -v POST :/someurl foo[bar]=baz
zsh: no matches found: foo[bar]=baz

> noglob http --offline -v POST :/someurl foo[bar]=baz
POST /someurl HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 19
Content-Type: application/json
Host: localhost
User-Agent: HTTPie/2.6.0

{
    "foo[bar]": "baz"
}

我正在使用 Httpie 3.0.2,并且在 Bash 中可以按预期进行相同的操作。IE:

{
    "foo": {
        "bar": "baz"
    }
}
4

1 回答 1

1

[...]是包括 zsh 在内的大多数 shell 中的通配符,需要引用。

foo[bar]=baz如果当前目录中有一些文件的名称与该glob 模式匹配(例如在 bash/dash/ksh... 之后尝试),那么您在其他 shell 中也会遇到问题touch foob=bar fooa=bar

在 bash 和其他 POSIX shell 中,如果不存在这样的文件,则默认情况下会按字面意思传递 glob,尽管failglobandnullglob选项会影响它。

在这里,您需要:

http --offline -v POST :/someurl 'foo[bar]=baz'
于 2022-03-01T11:40:34.123 回答