gpt4 book ai didi

python - 为什么这个带有 shebang #!/bin/sh 和 4 个单引号内的 exec python 的片段有效?

转载 作者:太空狗 更新时间:2023-10-29 17:03:14 26 4
gpt4 key购买 nike

我试图理解这个问题的答案之一:

Cannot pass an argument to python with "#!/usr/bin/env python"

#!/bin/sh
''''exec python -u -- "$0" ${1+"$@"} # '''

这很好用,但我不明白为什么它在该行的开头使用四个刻度而不是三个刻度。

此外,为什么哈希值靠近该字符串的末尾?

最佳答案

Python 支持三引号字符串:

'''something'''

Shell 仅支持单引号字符串:

'something'

通过使用 4 引号,sh 将其视为 2 个空字符串,但 Python 将前三个视为三重引号字符串的开头,并包括第四个作为字符串值的一部分。

该行的其余部分随后被 sh 解释为命令,但被 Python 解释为字符串的一部分。

sh 而言,# 构成注释,但对于 Python 来说它仍然是一个字符串,用三引号结束。

总结一下:

  • sh 看到:空字符串 ('') - 空字符串 ('') - 命令(exec python -u -- "$0"${1+"$@"}) - 注释(# ''')
  • Python 看到:三引号字符串文字(包含字符 'exec python -u -- "$0"${1+"$@"} #)

因此 sh 执行该命令,将自身替换为 python -u -- 脚本名称和其余命令行参数,Python 读取该文件并且只看到一个不会去任何地方的初始字符串文字。

因为它是文件中的第一个字符串文字,所以它会被设置为 __main__ 模块的文档字符串,但如果这是主脚本,这几乎无关紧要。

关于python - 为什么这个带有 shebang #!/bin/sh 和 4 个单引号内的 exec python 的片段有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17458528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com