我正在尝试理解这个问题的答案之一:
Cannot pass an argument to python with "#!/usr/bin/env python"
#!/bin/sh
''''exec python -u -- "$0" ${1+"$@"} # '''
这很好用,但我不明白为什么它在该行的开头使用四个刻度而不是三个。
另外,为什么哈希接近那个字符串的末尾?
答案 0 :(得分:27)
Python支持三引号字符串:
'''something'''
Shell仅支持单引号字符串:
'something'
通过使用四个引号,sh
将其视为2个空字符串,但Python将前三个视为三引号字符串的开头,并将第四个作为字符串值。
然后,该行的其余部分被sh
解释为命令,但是作为Python的字符串的一部分。
#
然后就sh
而言形成一个评论,但它仍然是Python的一个字符串,用一个结束的三重引号将其关闭。
所以,总结一下:
sh
看到:空字符串(''
) - 空字符串(''
) - 命令({ {1}}) - 评论(exec python -u -- "$0" ${1+"$@"}
) # '''
) 所以'exec python -u -- "$0" ${1+"$@"} #
执行该命令,用sh
替换自己的脚本名称和其余的命令行参数,Python读取这个文件,只看到一个初始的字符串文字,不是'去任何地方。
因为它是文件中的第一个字符串文字,所以它将被设置为python -u --
模块的文档字符串,但如果这是主脚本则几乎不重要。
答案 1 :(得分:-1)
我只是使用:
#!/bin/sh
''':'
exec python -tt "$0" "$@"
'''
# The above shell shabang trick is more portable than /usr/bin/env and supports adding arguments to the interpreter (python -tt)