Python supporta stringhe triple-citato:
'''something'''
Shell supporta solo le stringhe racchiuse tra virgolette singole:
'something'
Utilizzando quattro citazioni, sh
vede che come 2 stringhe vuote, ma Python vede i primi tre come l'inizio di una stringa con quotatura tripla e include il quarto come parte del valore stringa.
Il resto della riga viene quindi interpretato come un comando da sh
, ma come parte di una stringa da Python.
Il #
quindi forma un commento per quanto riguarda sh
è interessato, ma è ancora una stringa per Python, chiudendolo con una tripla virgola di chiusura.
Quindi, per riassumere:
sh
vede: stringa vuota (''
)-stringa vuota (''
)-comando (exec python -u -- "$0" ${1+"[email protected]"}
)-commento (# '''
)
- Python vede: letterale stringa con quotatura tripla (contenente i caratteri
'exec python -u -- "$0" ${1+"[email protected]"} #
)
Così sh
esegue quel comando, si sostituisce con la python -u --
con il nome dello script e il resto degli argomenti della riga di comando, e Python legge questo file e appena vede una stringa iniziale letterale che non sta da nessuna parte.
Poiché è la prima stringa letterale nel file, verrà impostata come docstring per il modulo __main__
ma non importa se questo è lo script principale.
fonte
2013-07-03 21:41:03
Basta notare che questo lancerà * qualsiasi * pitone in '$ path' quindi è ** terribilmente insicura ** rispetto al' #/usr/bin/env -i! python' * o * (ancora meglio) conoscendo e utilizzando il percorso completo: '#!/usr/bin/python'. –