为什么 `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 中执行此命令,您会收到您描述的错误。
当我在 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 中执行此命令,您会收到您描述的错误。