为什么 `python -c 'print('howdy')'` 会产生错误(在 zsh 中),而 `python -c 'print("howdy")'` 却不会?

Why does `python -c 'print('howdy')'` produce an error (in zsh), but `python -c 'print("howdy")'` does not?

当我在 zsh 中从命令行执行 python -c 'print('howdy')' 时,会产生以下错误。

Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'howdy' is not defined

然而,这个 python -c 'print("howdy")' 没有,而是产生了我期望的输出,即 howdy (作为字符串)被发送到 stdout?

我认为 python 无法理解单引号或双引号

Zsh 首先解析命令,遵循它自己的引号规则。对于 zsh,命令 python -c 'print('howdy')' 类似于以下内容:

  • 我们正在调用程序 python
  • 第一个参数是-c
  • 第二个参数是用引号括起来的 'print(',然后是 howdy,然后是用引号括起来的 ')'

Zsh 正在将第二个参数“扩展”到 'print(howdy)'。如果您 运行 在 python 中执行此命令,您会收到您描述的错误。