Pythonはトリプル引用符で囲まれた文字列をサポートしています。sh
は2つの空の文字列としてことを認識しますが、Pythonの、引用符を使用することにより
'something'
:
'''something'''
シェルは単一引用符で囲まれた文字列をサポートしています最初の3文字は3重引用符で囲まれた文字列の先頭になり、4文字目は文字列値の一部として含まれます。
残りの行は、sh
によってコマンドとして解釈されますが、Pythonによる文字列の一部として解釈されます。
#
は、sh
まではコメントを作成しますが、まだPythonの文字列であり、閉じた3重引用符で閉じます。
だから、
、要約する:
sh
が見る:空の文字列(''
)から空の文字列(''
)からコマンド(exec python -u -- "$0" ${1+"[email protected]"}
)からコメント(# '''
)
- Pythonで表示される文字:二重引用符の文字列リテラル(文字:
'exec python -u -- "$0" ${1+"[email protected]"} #
)
のでsh
は、スクリプト名とコマンドライン引数の残りの部分とpython -u --
で自身を置き換えて、そのコマンドを実行し、Pythonは、このファイルを読み込んで、どこでも行っていないリテラルの初期文字列を見ています。
ファイル内の最初の文字列リテラルなので、__main__
モジュールのドキュメントストリングとして設定されますが、これがメインスクリプトの場合はほとんど問題になりません。
ただ、 'ます。#/ usr/bin/envを-iに比べ**それは**ひどく不安定なですので、これは' $のPATH'で*は任意の*パイソンを起動することに注意してくださいpython' *または*(さらに良い)フルパスを知っていて、それを使用する: '#!/ usr/bin/python'。 –