为什么这个带有shebang#!/ bin / sh和exec python的代码片段在4个单引号内起作用?

发布于 2021-01-29 18:34:34

我正在尝试了解此问题的答案之一:

无法使用“#!/ usr / bin / env
python”将参数传递给python

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

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

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

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Python支持三引号字符串:

    '''something'''
    

    Shell仅支持单引号字符串:

    'something'
    

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

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

    #随后形成尽可能评论sh而言,但它仍然是一个字符串到Python,有三个结束引号关闭它。

    因此,总结一下:

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

    因此sh执行该命令,并python -u --用脚本名称和其余命令行参数替换自身,Python读取该文件,然后看到一个初始字符串文字,该文字不会随处可见。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看