【问题标题】:Terminal throwing error around ampersand (&) on curl request在 curl 请求中,终端在 & 符号(&)周围抛出错误
【发布时间】:2021-12-23 22:28:59
【问题描述】:

我正在尝试使用运行 Big Sur 和 zsh 作为我的 shell 的 Mac 上的终端对公共 API 执行非常简单的 curl 请求。这是命令:

https://api.nasa.gov/neo/rest/v1/feed?start_date=2021-11-11&end_date=2021-11-11&api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我不断收到此错误消息:

zsh: parse error near `&'

我不明白这是什么意思,因为命令中没有引号。我尝试将密钥括在引号中以查看是否可以解决它,相同的消息,然后尝试包装日期和密钥,同样的事情,切换参数的顺序,相同。

不胜感激。

【问题讨论】:

  • ZSH 将尝试解析那些&= 等。你需要转义它们:curl https://api.nasa.gov/neo/rest/v1/feed\?start_date\=2021-11-11\&end_date\=2021-11-11\&api_key\=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX(或使用引号...)
  • 更好的是,只需(单个)引用整个 URL。无论其内容如何,​​您都不打算 shell 处理它,所以不要给它机会。这样您就不必通过 URL 挑选并决定哪些字符需要转义,哪些不需要。

标签: curl terminal zsh


【解决方案1】:

你应该引用 "offending" 参数,因为它包含 shell 元字符

卷曲 https://www.google.com/search?q=test&ie=utf-8&oe=utf-8&client=firefox-b-ab

应该变成

卷曲“ https://www.google.com/search?q=test&ie=utf-8&oe=utf-8&client=firefox-b-ab"

您可以使用单引号或双引号,也可以转义(前缀为 blackslash) 只有 & 和 ?字符,因为它们都是外壳 元字符,像这样:

卷曲 https://www.google.com/search\?q=test\&ie=utf-8\&oe=utf-8\&client=firefox-b-ab

您可以在此处阅读有关 shell 元字符的更多信息:

http://faculty.salina.k-state.edu/tim/unix_sg/shell/metachar.html

希望对你有所帮助,最好的问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多