Di solito, $0in uno script è impostato il nome dello script o qualsiasi cosa sia stata invocata (incluso il percorso). Tuttavia, se uso bashcon l' -copzione, $0è impostato sul primo degli argomenti passati dopo la stringa di comando:
bash -c 'echo $0 ' foo bar
# foo
In effetti, sembra che i parametri posizionali siano stati spostati, ma inclusi $0. Tuttavia shiftnella stringa di comando non influisce $0(come di consueto):
bash -c 'echo $0; shift; echo $0 ' foo bar
# foo
# foo
Perché questo comportamento apparentemente strano per le stringhe di comando? Nota che sto cercando il motivo, la logica, dietro l'implementazione di un comportamento così strano.
Si potrebbe ipotizzare che una tale stringa di comando non avrebbe bisogno del $0parametro come di solito definito, quindi per l'economia viene usata anche per argomenti normali. Tuttavia, in quel caso il comportamento di shiftè strano. Un'altra possibilità è che $0viene utilizzata per definire il comportamento dei programmi ( bashcome chiamato come sho vimchiamato come vi), ma ciò non può essere, poiché $0qui viene visualizzato solo nella stringa di comando e non dai programmi richiamati al suo interno. Non riesco a pensare ad altri usi per $0, quindi non riesco a spiegarlo.
echo 'echo the other side of this pipe globs "$@"' | sh -s -- *, se, purtroppo, $0non è in genere un parametro impostabile con l' -sopzione di tream ... Può essere utilizzato in molti degli stessi modi xargsin generale è, però. E altri ancora.
--, quindi avrebbe potuto avere la solita interpretazione di "da qui inizia gli argomenti", vista in alcuni altri programmi. Ancora una volta, ciò potrebbe confondere chi non ha familiarità con il -cpensiero di avere --effettivamente questa interpretazione.
-per l'$0argomento come un linguaggio, come insh -c 'foo $1 $2' - a b. In questo modo sembra abbastanza normale (una volta scoperto cosa-significa, cioè)